소스 검색

Fix #1630: New `preProcessUpload` callback that can convert / encrypt file content before upload

Kartik Visweswaran 4 년 전
부모
커밋
cba13eed62
3개의 변경된 파일15개의 추가작업 그리고 5개의 파일을 삭제
  1. 1 0
      CHANGE.md
  2. 14 5
      js/fileinput.js
  3. 0 0
      js/fileinput.min.js

+ 1 - 0
CHANGE.md

@@ -5,6 +5,7 @@ Change Log: `bootstrap-fileinput`
 
 **Date**: _under development_
 
+- (enh #1630): New `preProcessUpload` callback that can convert / encrypt file content before upload.
 - (enh #1627): Add bootstrap 4 progress bar animation.
 - (enh #1625): Default `minFileSize` to -1 to allow zero byte files to be uploaded.
 - (enh #1617): Better encoded file id generation.

+ 14 - 5
js/fileinput.js

@@ -3612,10 +3612,18 @@
                     self._showFileError(errMsg, params);
                 }, self.processDelay);
             };
-            formdata.append(self.uploadFileAttr, fileObj.file, fileName);
+            self._setFileData(formdata, fileObj.file, fileName, id);
             self._setUploadData(formdata, {fileId: id});
             self._ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError, formdata, id, i);
         },
+        _setFileData: function(formdata, file, fileName, fileId) {
+            var self = this, preProcess = self.preProcessUpload;
+            if (preProcess && typeof preProcess === 'function') {
+                formdata.append(self.uploadFileAttr, preProcess(fileId, file));
+            } else {
+                formdata.append(self.uploadFileAttr, file, fileName);
+            }
+        },
         _uploadBatch: function () {
             var self = this, fm = self.fileManager, total = fm.total(), params = {}, fnBefore, fnSuccess, fnError,
                 fnComplete, hasPostData = total > 0 || !$.isEmptyObject(self.uploadExtraData), errMsg,
@@ -3739,7 +3747,7 @@
             var ctr = 0;
             $.each(self.fileManager.stack, function (key, data) {
                 if (!$h.isEmpty(data.file)) {
-                    formdata.append(self.uploadFileAttr, data.file, (data.nameFmt || ('untitled_' + ctr)));
+                    self._setFileData(formdata, data.file, (data.nameFmt || ('untitled_' + ctr)), key);
                 }
                 ctr++;
             });
@@ -5190,7 +5198,7 @@
                     return;
                 }
                 self.lock(true);
-                var file = files[i], previewId = previewInitId + '-' + self._getFileId(file), fSizeKB, j, msg,
+                var file = files[i], id = self._getFileId(file), previewId = previewInitId + '-' + id, fSizeKB, j, msg,
                     fnText = settings.text, fnImage = settings.image, fnHtml = settings.html, typ, chk, typ1, typ2,
                     caption = self._getFileName(file, ''), fileSize = (file && file.size || 0) / 1000,
                     fileExtExpr = '', previewData = $h.createObjectURL(file), fileCount = 0,
@@ -5207,7 +5215,7 @@
                             self._updateFileDetails(numFiles);
                             readFile(i + 1);
                         }, self.processDelay);
-                        if (self._raise('fileloaded', [file, previewId, i, reader]) && self.isAjaxUpload) {
+                        if (self._raise('fileloaded', [file, previewId, id, i, reader]) && self.isAjaxUpload) {
                             fm.add(file);
                         }
                     };
@@ -5309,7 +5317,7 @@
                             self._updateFileDetails(numFiles);
                         }
                         readFile(i + 1);
-                        self._raise('fileloaded', [file, previewId, i]);
+                        self._raise('fileloaded', [file, previewId, id, i]);
                     }, 10);
                     return;
                 }
@@ -5943,6 +5951,7 @@
         fileActionSettings: {},
         otherActionButtons: '',
         textEncoding: 'UTF-8',
+        preProcessUpload: null,
         ajaxSettings: {},
         ajaxDeleteSettings: {},
         showAjaxErrorDetails: true,

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
js/fileinput.min.js


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.