You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

MinioUploader.vue 9.4 kB

5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="dropzone-wrapper dataset-files">
  3. <div
  4. id="dataset"
  5. class="dropzone"
  6. />
  7. <p class="upload-info">
  8. {{ file_status_text }}
  9. <span class="success">{{ status }}</span>
  10. </p>
  11. </div>
  12. </template>
  13. <script>
  14. /* eslint-disable eqeqeq */
  15. // import Dropzone from 'dropzone/dist/dropzone.js';
  16. // import 'dropzone/dist/dropzone.css'
  17. import createDropzone from '../features/dropzone.js';
  18. import ObsClient from 'esdk-obs-browserjs';
  19. const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config;
  20. export default {
  21. data() {
  22. return {
  23. dropzoneUploader: null,
  24. maxFiles: 1,
  25. maxFilesize: 1 * 1024 * 1024 * 1024 * 1024,
  26. acceptedFiles: '*/*',
  27. progress: 0,
  28. status: '',
  29. dropzoneParams: {},
  30. file_status_text: ''
  31. };
  32. },
  33. async mounted() {
  34. this.dropzoneParams = $('div#minioUploader-params');
  35. this.file_status_text = this.dropzoneParams.data('file-status');
  36. this.status = this.dropzoneParams.data('file-init-status');
  37. let previewTemplate = '';
  38. previewTemplate += '<div class="dz-preview dz-file-preview">\n ';
  39. previewTemplate += ' <div class="dz-details">\n ';
  40. previewTemplate += ' <div class="dz-filename">';
  41. previewTemplate +=
  42. ' <span data-dz-name data-dz-thumbnail></span>';
  43. previewTemplate += ' </div>\n ';
  44. previewTemplate += ' <div class="dz-size" data-dz-size></div>\n ';
  45. previewTemplate += ' </div>\n ';
  46. previewTemplate += ' <div class="dz-progress ui active progress">';
  47. previewTemplate +=
  48. ' <div class="dz-upload bar" data-dz-uploadprogress><div class="progress"></div></div>\n ';
  49. previewTemplate += ' </div>\n ';
  50. previewTemplate += ' <div class="dz-success-mark">';
  51. previewTemplate += ' <span>上传成功</span>';
  52. previewTemplate += ' </div>\n ';
  53. previewTemplate += ' <div class="dz-error-mark">';
  54. previewTemplate += ' <span>上传失败</span>';
  55. previewTemplate += ' </div>\n ';
  56. previewTemplate += ' <div class="dz-error-message">';
  57. previewTemplate += ' <span data-dz-errormessage></span>';
  58. previewTemplate += ' </div>\n';
  59. previewTemplate += '</div>';
  60. const $dropzone = $('div#dataset');
  61. console.log('createDropzone');
  62. const dropzoneUploader = await createDropzone($dropzone[0], {
  63. url: '/todouploader',
  64. maxFiles: this.maxFiles,
  65. maxFilesize: this.maxFileSize,
  66. timeout: 0,
  67. autoQueue: false,
  68. dictDefaultMessage: this.dropzoneParams.data('default-message'),
  69. dictInvalidFileType: this.dropzoneParams.data('invalid-input-type'),
  70. dictFileTooBig: this.dropzoneParams.data('file-too-big'),
  71. dictRemoveFile: this.dropzoneParams.data('remove-file'),
  72. previewTemplate,
  73. });
  74. // 文件发送前调用
  75. // dropzoneUploader.on('sending', (file, xhr, formData) => {
  76. // console.log(xhr)
  77. // console.log(formData)
  78. // });
  79. // 文件复制后触发
  80. dropzoneUploader.on('addedfile', (file) => {
  81. if(file.status == 'added'){
  82. this.onFileAdded(file)
  83. }
  84. });
  85. dropzoneUploader.on('success', (file, res) => {
  86. this.emitDropzoneSuccess(file)
  87. });
  88. // dropzoneUploader.on('totaluploadprogress', function(file, progress){
  89. // this.updateProgress(file, progress)
  90. // });
  91. dropzoneUploader.on('maxfilesexceeded', function (file) {
  92. if (this.files[0].status !== 'success') {
  93. alert(this.dropzoneParams.data('waitting-uploading'));
  94. this.removeFile(file);
  95. return;
  96. }
  97. this.removeAllFiles();
  98. this.addFile(file);
  99. });
  100. this.dropzoneUploader = dropzoneUploader;
  101. },
  102. methods: {
  103. resetStatus() {
  104. this.progress = 0;
  105. this.status = '';
  106. },
  107. updateProgress(file, progress) {
  108. file.previewTemplate.querySelector(
  109. '.dz-upload'
  110. ).style.width = `${progress}%`;
  111. },
  112. emitDropzoneSuccess(file) {
  113. file.status = 'success';
  114. this.dropzoneUploader.emit('success', file);
  115. this.dropzoneUploader.emit('complete', file);
  116. // this.finishUpload(file)
  117. },
  118. emitDropzoneFailed(file) {
  119. this.status = this.dropzoneParams.data('falied');
  120. file.status = 'error';
  121. this.dropzoneUploader.emit('error', file);
  122. // this.dropzoneUploader.emit('complete', file);
  123. },
  124. onFileAdded(file) {
  125. // file.datasetId = document
  126. // .getElementById('datasetId')
  127. // .getAttribute('datasetId');
  128. this.resetStatus();
  129. this.status = this.dropzoneParams.data('obs-connecting');
  130. console.log(this.dropzoneParams)
  131. console.log(this.status)
  132. this.do_uploader(file)
  133. },
  134. get_result(){
  135. var res
  136. $.ajax({
  137. url: '/attachments/get_obs_key',
  138. type: 'GET',
  139. async: false,
  140. success: function(result){
  141. res = result
  142. }
  143. });
  144. return res
  145. },
  146. getObsClient(){
  147. return new ObsClient({
  148. access_key_id: 'FDP3LRMHLB9S77VWEHE3',
  149. secret_access_key: 'LyM82Wk80pgjhs2z7AdDcsdpCWhbsJtSzQ7hkESN',
  150. server : 'https://obs.cn-south-222.ai.pcl.cn'
  151. });
  152. },
  153. do_uploader(file){
  154. // 创建ObsClient实例
  155. let obsClient = this.getObsClient()
  156. var cp;
  157. var hook;
  158. console.log(obsClient)
  159. obsClient.uploadFile({
  160. Bucket : 'testopendata',
  161. Key : this.get_result().key,
  162. SourceFile : file,
  163. PartSize : 64 * 1024 * 1024,
  164. // ProgressCallback : function(transferredAmount, totalAmount, totalSeconds){
  165. // console.log(transferredAmount * 1.0 / totalSeconds / 1024);
  166. // console.log(transferredAmount * 100.0 / totalAmount);
  167. // if(hook && (transferredAmount / totalAmount) > 0.5){
  168. // // 暂停断点续传任务
  169. // hook.cancel();
  170. // }
  171. // },
  172. EventCallback : function(eventType, eventParam, eventResult){
  173. // 处理事件响应
  174. console.log("1", eventType)
  175. console.log("2",eventParam)
  176. console.log("3",eventResult)
  177. },
  178. // ResumeCallback : function(resumeHook, uploadCheckpoint){
  179. // // 获取取消断点续传上传任务控制参数
  180. // hook = resumeHook;
  181. // // 记录断点
  182. // cp = uploadCheckpoint;
  183. // }
  184. }, function(err, result){
  185. // 出现错误,再次调用断点续传接口,继续上传任务
  186. if(err){
  187. console.error('Error-->' + err);
  188. // obsClient.uploadFile({
  189. // UploadCheckpoint : cp,
  190. // ProgressCallback : function(transferredAmount, totalAmount, totalSeconds){
  191. // console.log(transferredAmount * 1.0 / totalSeconds / 1024);
  192. // console.log(transferredAmount * 100.0 / totalAmount);
  193. // // },
  194. // EventCallback : function(eventType, eventParam, eventResult){
  195. // // 处理事件响应
  196. // console.log(eventType)
  197. // console.log(eventParam)
  198. // console.log(eventResult)
  199. // },
  200. // }, function(err, result){
  201. // if(err){
  202. // console.error('Error-->' + err);
  203. // }else{
  204. // if(result.CommonMsg.Status < 300){
  205. // console.log('RequestId-->' + result.InterfaceResult.RequestId);
  206. // console.log('Bucket-->' + result.InterfaceResult.Bucket);
  207. // console.log('Key-->' + result.InterfaceResult.Key);
  208. // console.log('Location-->' + result.InterfaceResult.Location);
  209. // }else{
  210. // console.log('Code-->' + result.CommonMsg.Code);
  211. // console.log('Message-->' + result.CommonMsg.Message);
  212. // }
  213. // }
  214. // });
  215. }else {
  216. console.log('Status-->' + result.CommonMsg.Status);
  217. if (result.CommonMsg.Status < 300 && result.InterfaceResult) {
  218. console.log('RequestId-->' + result.InterfaceResult.RequestId);
  219. }
  220. }
  221. });
  222. },
  223. finishUpload(file) {
  224. // $.ajax({
  225. // url: '/attachments/add',
  226. // type: 'POST',
  227. // data: {
  228. // 'uuid': get_result().uuid,
  229. // 'file_name': filepath.split('/')[-1],
  230. // 'size': file.size,
  231. // 'dataset_id': file.datasetId,
  232. // '_csrf': csrf,
  233. // 'type': 1
  234. // },
  235. // async: false,
  236. // success: function (data) {
  237. // console.log(data)
  238. // }
  239. // })
  240. setTimeout(() => {
  241. window.location.reload();
  242. }, 1000);
  243. }
  244. }
  245. };
  246. </script>
  247. <style>
  248. .dropzone-wrapper {
  249. margin: 2em auto;
  250. }
  251. .ui .dropzone {
  252. border: 2px dashed #0087f5;
  253. box-shadow: none !important;
  254. padding: 0;
  255. min-height: 5rem;
  256. border-radius: 4px;
  257. }
  258. .dataset .dataset-files #dataset .dz-preview.dz-file-preview,
  259. .dataset .dataset-files #dataset .dz-preview.dz-processing {
  260. display: flex;
  261. align-items: center;
  262. }
  263. .dataset .dataset-files #dataset .dz-preview {
  264. border-bottom: 1px solid #dadce0;
  265. min-height: 0;
  266. }
  267. </style>