[英]Bootstrap Fileinput does not send file again on second upload
當我使用Krajees Bootstrap Fileinput上傳文件時,我會對文件執行服務器端驗證。 當出現問題時,我只輸出一個JSON-Object {error:'Something went wrong'}
。 插件完美地顯示錯誤。
但是:當我再次按下“上傳”之后,調用提交PHP腳本中的$_FILES
數組為空。 這意味着,即使已通知已發生錯誤,插件也不會再次發送文件。
為什么插件只會上傳文件一次,即使它檢測到有錯誤? 有沒有什么方法可以“重置”文件的“上傳狀態”? (我只上傳一個文件)。
我已經檢查了文件事件,但沒有一個讓我達到了預期的結果,相反,他們破壞了整個上傳表單,某些按鈕被突然禁用等等。
我看到Github問題說目前不支持這個,但是分叉這個項目並根據你的需要進行調整似乎相對簡單。 所有fnError =
的,你會在找到Cmd + F
內搜索fileinput.js
情況下,你需要尋找。
以此為例: https : //github.com/kartik-v/bootstrap-fileinput/blob/d5ed3ee989edbd5d67b8cf4bdadc9f3c18609965/js/fileinput.js#L1897
這是針對當前如下所示的批處理文件上傳:
fnError = function (jqXHR, textStatus, errorThrown) {
var outData = self._getOutData(jqXHR), errMsg = self._parseError(jqXHR, errorThrown);
self._showUploadError(errMsg, outData, 'filebatchuploaderror');
self.uploadFileCount = total - 1;
if (!self.showPreview) {
return;
}
self._getThumbs().each(function () {
var $thumb = $(this), key = $thumb.attr('data-fileindex');
$thumb.removeClass('file-uploading');
if (self.filestack[key] !== undefined) {
self._setPreviewError($thumb);
}
});
self._getThumbs().removeClass('file-uploading');
self._getThumbs(' .kv-file-upload').removeAttr('disabled');
self._getThumbs(' .kv-file-delete').removeAttr('disabled');
};
我試着將其修改為:
fnError = function (jqXHR, textStatus, errorThrown) {
if (!myError.equals(textStatus)) { // A service-like impl. injection would be sexier
var outData = self._getOutData(jqXHR), errMsg = self._parseError(jqXHR, errorThrown);
self._showUploadError(errMsg, outData, 'filebatchuploaderror');
self.uploadFileCount = total - 1;
if (!self.showPreview) {
return;
}
self._getThumbs().each(function () {
var $thumb = $(this), key = $thumb.attr('data-fileindex');
$thumb.removeClass('file-uploading');
if (self.filestack[key] !== undefined) {
self._setPreviewError($thumb);
}
});
self._getThumbs().removeClass('file-uploading');
self._getThumbs(' .kv-file-upload').removeAttr('disabled');
self._getThumbs(' .kv-file-delete').removeAttr('disabled');
} else {
self._ajaxSubmit(fnBefore, fnSuccess, fnComplete, function() {
// TODO: Second time failure - handle recursively or differently? :-)
);
}
};
希望這可以幫助!
我終於找到了問題可以解決的確切點:
在在功能updateUploadLog線1705 ,功能self.updateStack
被調用。 此調用只是清除文件堆棧並導致后續進程清空表單輸入。 簡單地注釋掉這一行可以解決問題,但只有在成功后重新加載,因為在找到錯誤時也會調用fnSuccess
。
@Angad非常感謝你的解決方案觸發輸入,多虧了我找到了一個地方再次開始搜索;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.