簡體   English   中英

Bootstrap Fileinput在第二次上載時不再發送文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM