fmode-ng 0.0.113 → 0.0.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,133 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
// @ts-ignore
|
|
3
|
-
import ObsClient from "esdk-obs-browserjs";
|
|
4
|
-
import Parse from "parse";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/**
|
|
7
|
-
* HwobsService 华为OBS文件服务
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
export class HwobsService {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.Attachment = Parse.Object.extend("Attachment");
|
|
13
|
-
this.host = "https://web3-test.obs.cn-south-1.myhuaweicloud.com/";
|
|
14
|
-
this.bucketName = "web3-test";
|
|
15
|
-
this.obsClient = new ObsClient({
|
|
16
|
-
access_key_id: '6UIET20WHUI5TLXWOVNA',
|
|
17
|
-
secret_access_key: 'YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF',
|
|
18
|
-
// 这里以华南-广州为例,其他地区请按实际情况填写
|
|
19
|
-
server: 'https://obs.cn-south-1.myhuaweicloud.com'
|
|
20
|
-
});
|
|
21
|
-
}
|
|
1
|
+
|
|
22
2
|
/**
|
|
23
|
-
*
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-hwobs/hwobs.service.mjs
|
|
24
7
|
*/
|
|
25
|
-
listDir(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
Bucket: this.bucketName,
|
|
29
|
-
Prefix: prefix,
|
|
30
|
-
Delimiter: '/'
|
|
31
|
-
}, (err, result) => {
|
|
32
|
-
if (err) {
|
|
33
|
-
console.error('Error-->' + err);
|
|
34
|
-
reject(err);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
console.log('Status-->' + result.CommonMsg.Status);
|
|
38
|
-
console.log(result);
|
|
39
|
-
if (result.CommonMsg.Status < 300 && result.InterfaceResult) {
|
|
40
|
-
for (var j in result.InterfaceResult.Contents) {
|
|
41
|
-
console.log('Contents[' + j + ']:');
|
|
42
|
-
console.log('Key-->' + result.InterfaceResult.Contents[j]['Key']);
|
|
43
|
-
console.log('Owner[ID]-->' + result.InterfaceResult.Contents[j]['Owner']['ID']);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
let dirs = result.InterfaceResult.CommonPrefixes;
|
|
47
|
-
let files = result.InterfaceResult.Contents;
|
|
48
|
-
resolve({ dirs: dirs, files: files });
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 文件上传相关函数
|
|
55
|
-
* @param file
|
|
56
|
-
* @param key
|
|
57
|
-
* @returns
|
|
58
|
-
*/
|
|
59
|
-
async uploadFile(file, key) {
|
|
60
|
-
// key 文件上传后的全部路径
|
|
61
|
-
// /storage/<公司账套>/<应用名称>/年月日/<文件名>.<文件后缀>
|
|
62
|
-
// /storage/web2023/<学号>/年月日/<文件名>.<文件后缀>
|
|
63
|
-
let attach = await this.checkFileExists(file);
|
|
64
|
-
if (attach?.id)
|
|
65
|
-
return attach;
|
|
66
|
-
return new Promise((resolve, reject) => {
|
|
67
|
-
this.obsClient.putObject({
|
|
68
|
-
Bucket: this.bucketName,
|
|
69
|
-
Key: key,
|
|
70
|
-
SourceFile: file
|
|
71
|
-
}, async (err, result) => {
|
|
72
|
-
if (err) {
|
|
73
|
-
console.error('Error-->' + err);
|
|
74
|
-
reject(err);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.log('Status-->' + result.CommonMsg.Status);
|
|
78
|
-
let attach = await this.saveAttachment(file, key);
|
|
79
|
-
resolve(attach);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
async checkFileExists(file) {
|
|
85
|
-
let hash = await this.getFileHash(file);
|
|
86
|
-
// 文件HASH查重,避免重复上传
|
|
87
|
-
let attach;
|
|
88
|
-
let query = new Parse.Query("Attachment");
|
|
89
|
-
query.equalTo("hash", hash);
|
|
90
|
-
query.equalTo("size", file.size);
|
|
91
|
-
let exists = await query.first();
|
|
92
|
-
if (!exists?.id)
|
|
93
|
-
exists = new this.Attachment();
|
|
94
|
-
attach = exists;
|
|
95
|
-
return attach;
|
|
96
|
-
}
|
|
97
|
-
async saveAttachment(file, key) {
|
|
98
|
-
let hash = await this.getFileHash(file);
|
|
99
|
-
let attach = await this.checkFileExists(file);
|
|
100
|
-
attach.set("name", file.name);
|
|
101
|
-
attach.set("size", file.size);
|
|
102
|
-
attach.set("mime", file.type);
|
|
103
|
-
attach.set("url", this.host + key);
|
|
104
|
-
attach.set("hash", hash);
|
|
105
|
-
attach = await attach.save();
|
|
106
|
-
return attach;
|
|
107
|
-
}
|
|
108
|
-
async getFileHash(file) {
|
|
109
|
-
return new Promise((resolve, reject) => {
|
|
110
|
-
const reader = new FileReader();
|
|
111
|
-
reader.onload = async (event) => {
|
|
112
|
-
const buffer = event.target.result;
|
|
113
|
-
const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
|
|
114
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
115
|
-
const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
|
|
116
|
-
resolve(hashHex);
|
|
117
|
-
};
|
|
118
|
-
reader.onerror = (event) => {
|
|
119
|
-
reject(event.target.error);
|
|
120
|
-
};
|
|
121
|
-
reader.readAsArrayBuffer(file);
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
125
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, providedIn: 'root' }); }
|
|
126
|
-
}
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, decorators: [{
|
|
128
|
-
type: Injectable,
|
|
129
|
-
args: [{
|
|
130
|
-
providedIn: 'root'
|
|
131
|
-
}]
|
|
132
|
-
}], ctorParameters: () => [] });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHdvYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvc3RvcmFnZS9zZXJ2aWNlLWh3b2JzL2h3b2JzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxhQUFhO0FBQ2IsT0FBTyxTQUFTLE1BQU0sb0JBQW9CLENBQUE7QUFFMUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQXdCMUI7OztHQUdHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFJdkI7UUEyRUEsZUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBMUUxQyxJQUFJLENBQUMsSUFBSSxHQUFHLHFEQUFxRCxDQUFBO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFBO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDN0IsYUFBYSxFQUFFLHNCQUFzQjtZQUNyQyxpQkFBaUIsRUFBRSwwQ0FBMEM7WUFDN0QsMEJBQTBCO1lBQzFCLE1BQU0sRUFBRSwwQ0FBMEM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLE1BQU07UUFJWixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUN6QixNQUFNLEVBQUcsSUFBSSxDQUFDLFVBQVU7Z0JBQ3hCLE1BQU0sRUFBRyxNQUFNO2dCQUNmLFNBQVMsRUFBRSxHQUFHO2FBQ2YsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDakIsSUFBRyxHQUFHLEVBQUMsQ0FBQztvQkFDTixPQUFPLENBQUMsS0FB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bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IE9ic0NsaWVudCBmcm9tIFwiZXNkay1vYnMtYnJvd3NlcmpzXCJcclxuXHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBId29ic0RpciDljY7kuLpPQlPnm67lvZXmjqXlj6NcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBId29ic0RpcntcclxuICBQcmVmaXg6c3RyaW5nICAvLyBcInN0b3JhZ2UvMjAyMy9cIlxyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEh3b2JzRGlyIOWNjuS4uk9CU+aWh+S7tuaOpeWPo1xyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEh3b2JzRmlsZXtcclxuICBFVGFnOiBcIlxcXCJmMGVjOTY4ZmU1MWFiNDgzNDgzMDdlMDY0NzYxMjJlYlxcXCJcIlxyXG4gIEtleTpzdHJpbmcgIC8vXCJzdG9yYWdlLzNta2Y0MTAzMzYyMzI3NS5wbmdcIlxyXG4gIExhc3RNb2RpZmllZDpzdHJpbmcgLy9cIjIwMjMtMTEtMDhUMTI6MDM6MTMuMDA4WlwiXHJcbiAgT3duZXI6b2JqZWN0IC8vIHtJRDogJzA5OTcxYTE5Nzk4MDBmYjYwZmJiYzAwYWRhNTFmN2UwJ31cclxuICBTaXplOnN0cmluZyAvL1wiMjU4MzlcIlxyXG4gIFN0b3JhZ2VDbGFzczpzdHJpbmcgLy9cIlNUQU5EQVJEXCJcclxufVxyXG5cclxuLyoqXHJcbiAqIEh3b2JzU2VydmljZSDljY7kuLpPQlPmlofku7bmnI3liqFcclxuICogQHB1YmxpY1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSHdvYnNTZXJ2aWNlIHtcclxuICBvYnNDbGllbnQ6T2JzQ2xpZW50XHJcbiAgYnVja2V0TmFtZTpzdHJpbmdcclxuICBob3N0OnN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICB0aGlzLmhvc3QgPSBcImh0dHBzOi8vd2ViMy10ZXN0Lm9icy5jbi1zb3V0aC0xLm15aHVhd2VpY2xvdWQuY29tL1wiXHJcbiAgICAgIHRoaXMuYnVja2V0TmFtZSA9IFwid2ViMy10ZXN0XCJcclxuICAgICAgdGhpcy5vYnNDbGllbnQgPSBuZXcgT2JzQ2xpZW50KHtcclxuICAgICAgICBhY2Nlc3Nfa2V5X2lkOiAnNlVJRVQyMFdIVUk1VExYV09WTkEnLCAgICAgICBcclxuICAgICAgICBzZWNyZXRfYWNjZXNzX2tleTogJ1lhb1k4S2ozVGVHWkhFY0J6cGxUTVppUEdOTDEzWTNmckVhdkMxa0YnLFxyXG4gICAgICAgIC8vIOi/memHjOS7peWNjuWNly3lub/lt57kuLrkvovvvIzlhbbku5blnLDljLror7fmjInlrp7pmYXmg4XlhrXloavlhplcclxuICAgICAgICBzZXJ2ZXI6ICdodHRwczovL29icy5jbi1zb3V0aC0xLm15aHVhd2VpY2xvdWQuY29tJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDnm67lvZXlj4rmo4DntKLnm7jlhbPlh73mlbBcclxuICAgKi9cclxuICBsaXN0RGlyKHByZWZpeCk6UHJvbWlzZTx7XHJcbiAgICBkaXJzOkFycmF5PEh3b2JzRGlyPixcclxuICAgIGZpbGVzOkFycmF5PEh3b2JzRmlsZT5cclxuICB9PntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XHJcbiAgICAgICAgdGhpcy5vYnNDbGllbnQubGlzdE9iamVjdHMoe1xyXG4gICAgICAgICAgQnVja2V0IDogdGhpcy5idWNrZXROYW1lLFxyXG4gICAgICAgICAgUHJlZml4IDogcHJlZml4LFxyXG4gICAgICAgICAgRGVsaW1pdGVyOiAnLydcclxuICAgICAgICB9LCAoZXJyLCByZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmKGVycil7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3ItLT4nICsgZXJyKTsgICBcclxuICAgICAgICAgICAgcmVqZWN0KGVycikgICAgXHJcbiAgICAgICAgICB9ZWxzZXsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhdHVzLS0+JyArIHJlc3VsdC5Db21tb25Nc2cuU3RhdHVzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5Db21tb25Nc2cuU3RhdHVzIDwgMzAwICYmIHJlc3VsdC5JbnRlcmZhY2VSZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaiBpbiByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbnRlbnRzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnRzWycgKyBqICsgICddOicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnS2V5LS0+JyArIHJlc3VsdC5JbnRlcmZhY2VSZXN1bHQuQ29udGVudHNbal1bJ0tleSddKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ093bmVyW0lEXS0tPicgKyByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbnRlbnRzW2pdWydPd25lciddWydJRCddKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaXJzOkh3b2JzRGlyW10gPSByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbW1vblByZWZpeGVzXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVzOkh3b2JzRmlsZVtdID0gcmVzdWx0LkludGVyZmFjZVJlc3VsdC5Db250ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe2RpcnM6ZGlycyxmaWxlczpmaWxlc30pICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmlofku7bkuIrkvKDnm7jlhbPlh73mlbBcclxuICAgKiBAcGFyYW0gZmlsZSBcclxuICAgKiBAcGFyYW0ga2V5IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGFzeW5jIHVwbG9hZEZpbGUoZmlsZTpGaWxlLGtleTpzdHJpbmcpOlByb21pc2U8UGFyc2UuT2JqZWN0PntcclxuICAgIC8vIGtleSDmlofku7bkuIrkvKDlkI7nmoTlhajpg6jot6/lvoRcclxuICAgIC8vIC9zdG9yYWdlLzzlhazlj7jotKblpZc+LzzlupTnlKjlkI3np7A+L+W5tOaciOaXpS885paH5Lu25ZCNPi485paH5Lu25ZCO57yAPlxyXG4gICAgLy8gL3N0b3JhZ2Uvd2ViMjAyMy885a2m5Y+3Pi/lubTmnIjml6UvPOaWh+S7tuWQjT4uPOaWh+S7tuWQjue8gD5cclxuICAgIGxldCBhdHRhY2ggPSBhd2FpdCB0aGlzLmNoZWNrRmlsZUV4aXN0cyhmaWxlKTtcclxuICAgIGlmKGF0dGFjaD8uaWQpIHJldHVybiBhdHRhY2hcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICB0aGlzLm9ic0NsaWVudC5wdXRPYmplY3Qoe1xyXG4gICAgICAgICAgICAgIEJ1Y2tldCA6IHRoaXMuYnVja2V0TmFtZSxcclxuICAgICAgICAgICAgICBLZXkgOiBrZXksXHJcbiAgICAgICAgICAgICAgU291cmNlRmlsZSA6IGZpbGVcclxuICAgICAgICB9LCAgYXN5bmMgKGVyciwgcmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvci0tPicgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpXHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhdHVzLS0+JyArIHJlc3VsdC5Db21tb25Nc2cuU3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdHRhY2ggPSBhd2FpdCB0aGlzLnNhdmVBdHRhY2htZW50KGZpbGUsa2V5KVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhdHRhY2gpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gIH1cclxuICBBdHRhY2htZW50ID0gUGFyc2UuT2JqZWN0LmV4dGVuZChcIkF0dGFjaG1lbnRcIilcclxuXHJcbiAgYXN5bmMgY2hlY2tGaWxlRXhpc3RzKGZpbGUpOlByb21pc2U8UGFyc2UuT2JqZWN0PntcclxuICAgIGxldCBoYXNoID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFzaChmaWxlKVxyXG4gICAgLy8g5paH5Lu2SEFTSOafpemHjSzpgb/lhY3ph43lpI3kuIrkvKBcclxuICAgIGxldCBhdHRhY2g6UGFyc2UuT2JqZWN0XHJcbiAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBdHRhY2htZW50XCIpXHJcbiAgICBxdWVyeS5lcXVhbFRvKFwiaGFzaFwiLGhhc2gpO1xyXG4gICAgcXVlcnkuZXF1YWxUbyhcInNpemVcIixmaWxlLnNpemUpO1xyXG4gICAgbGV0IGV4aXN0czphbnkgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xyXG4gICAgaWYoIWV4aXN0cz8uaWQpIGV4aXN0cyA9IG5ldyB0aGlzLkF0dGFjaG1lbnQoKVxyXG4gICAgYXR0YWNoID0gZXhpc3RzXHJcbiAgICByZXR1cm4gYXR0YWNoXHJcbiAgfVxyXG4gIGFzeW5jIHNhdmVBdHRhY2htZW50KGZpbGU6RmlsZSxrZXk6c3RyaW5nKXtcclxuICAgIGxldCBoYXNoID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFzaChmaWxlKVxyXG4gICAgbGV0IGF0dGFjaCA9IGF3YWl0IHRoaXMuY2hlY2tGaWxlRXhpc3RzKGZpbGUpXHJcbiAgICBhdHRhY2guc2V0KFwibmFtZVwiLGZpbGUubmFtZSlcclxuICAgIGF0dGFjaC5zZXQoXCJzaXplXCIsZmlsZS5zaXplKVxyXG4gICAgYXR0YWNoLnNldChcIm1pbWVcIixmaWxlLnR5cGUpXHJcbiAgICBhdHRhY2guc2V0KFwidXJsXCIsdGhpcy5ob3N0ICsga2V5KVxyXG4gICAgYXR0YWNoLnNldChcImhhc2hcIixoYXNoKVxyXG4gICAgYXR0YWNoID0gYXdhaXQgYXR0YWNoLnNhdmUoKVxyXG4gICAgcmV0dXJuIGF0dGFjaFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RmlsZUhhc2goZmlsZTpGaWxlKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGV2ZW50OmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgYnVmZmVyKTtcclxuICAgICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcclxuICAgICAgICBjb25zdCBoYXNoSGV4ID0gaGFzaEFycmF5Lm1hcChieXRlID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xyXG4gICAgICAgIHJlc29sdmUoaGFzaEhleCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGV2ZW50OmFueSkgPT4ge1xyXG4gICAgICAgIHJlamVjdChldmVudC50YXJnZXQuZXJyb3IpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
8
|
+
import{Injectable}from"@angular/core";import ObsClient from"esdk-obs-browserjs";import{FmodeParse}from"@fmode/parse";import*as i0 from"@angular/core";const Parse=FmodeParse.with("nova");export class HwobsService{constructor(){this.host="https://web3-test.obs.cn-south-1.myhuaweicloud.com/",this.bucketName="web3-test",this.obsClient=new ObsClient({access_key_id:"6UIET20WHUI5TLXWOVNA",secret_access_key:"YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF",server:"https://obs.cn-south-1.myhuaweicloud.com"})}listDir(e){return new Promise(((t,s)=>{this.obsClient.listObjects({Bucket:this.bucketName,Prefix:e,Delimiter:"/"},((e,r)=>{if(e)console.error("Error--\x3e"+e),s(e);else{if(console.log("Status--\x3e"+r.CommonMsg.Status),console.log(r),r.CommonMsg.Status<300&&r.InterfaceResult)for(var o in r.InterfaceResult.Contents)console.log("Contents["+o+"]:"),console.log("Key--\x3e"+r.InterfaceResult.Contents[o].Key),console.log("Owner[ID]--\x3e"+r.InterfaceResult.Contents[o].Owner.ID);let e=r.InterfaceResult.CommonPrefixes,s=r.InterfaceResult.Contents;t({dirs:e,files:s})}}))}))}async uploadFile(e,t){let s=await this.checkFileExists(e);return s?.id?s:new Promise(((s,r)=>{this.obsClient.putObject({Bucket:this.bucketName,Key:t,SourceFile:e},(async(o,a)=>{if(o)console.error("Error--\x3e"+o),r(o);else{console.log("Status--\x3e"+a.CommonMsg.Status);let r=await this.saveAttachment(e,t);s(r)}}))}))}async checkFileExists(e){let t,s=await this.getFileHash(e),r=new Parse.Query("Attachment");r.equalTo("hash",s),r.equalTo("size",e.size);let o=await r.first();return o?.id||(o=new Parse.Object("Attachment")),t=o,t}async saveAttachment(e,t){let s=await this.getFileHash(e),r=await this.checkFileExists(e);return r.set("name",e.name),r.set("size",e.size),r.set("mime",e.type),r.set("url",this.host+t),r.set("hash",s),r=await r.save(),r}async getFileHash(e){return new Promise(((t,s)=>{const r=new FileReader;r.onload=async e=>{const s=e.target.result,r=await crypto.subtle.digest("SHA-256",s),o=Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("");t(o)},r.onerror=e=>{s(e.target.error)},r.readAsArrayBuffer(e)}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtaHdvYnMvaHdvYnMuc2VydmljZS5tanM=`
|
|
10
|
+
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-hwobs/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
import"./typings/esdk-obs-browser";export*from"./hwobs.service";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtaHdvYnMvaW5kZXgubWpz`
|
|
10
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNkay1vYnMtYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvc3RvcmFnZS9zZXJ2aWNlLWh3b2JzL3R5cGluZ3MvZXNkay1vYnMtYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBkZWNsYXJlIG1vZHVsZSAnZXNkay1vYnMtYnJvd3NlcmpzJztcbmRlY2xhcmUgbW9kdWxlICdlc2RrLW9icy1icm93c2VyanMnIHtcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBPYnNDbGllbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBhbnkpO1xuICAgICAgICBwdXRPYmplY3Q6RnVuY3Rpb247XG4gICAgICAgIC8vIOagueaNrumcgOimgea3u+WKoOWFtuS7luaWueazleeahOWjsOaYjlxuICAgICAgICBsaXN0T2JqZWN0czpGdW5jdGlvblxuICAgIH1cbn0iXX0=
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-upload/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./nova-upload.service";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL2luZGV4Lm1qcw==`
|
|
10
|
+
|