2017-10-05 57 views
0

我試圖提供一個解決方案,允許將文件上傳到帶有C#後端的REST API。目前,我可以使用XMLHttpRequests和JavaScript上傳文件並獲取他們上傳的進度。我遇到的問題是所有文件併發上傳,並且我看到混合控制檯消息和上傳進度。將文件名與XMLHttpRequest關聯

我的問題如下:有沒有一種方法可以將表單中傳入的文件名或文件信息關聯起來,以便我可以確定當前正在查看哪個文件的進度?

望着onprogresse可變我無法找到任何標識符除了上載是否被認爲是其自己的實體這是有道理的文件的大小的文件。

我的代碼是下面的三個文件控制檯日誌的嘗試:

HTML表單:

<form id="uploadForm" method="post"> 
    <input type="file" name="files[]" multiple/> 
    <input type="button" id="uploadButton" value="Save" /> 
</form> 

JAVASCRIPT

$('#uploadButton').click(function() { 

var files = document.forms['uploadForm']['files[]'].files; //Gather files from the form 
for(var i = 0; i < files.length; i++) { //for each file 
    console.log(files[i].name + "; " + files[i].type + "; " + files[i].size); //log file info 
    var form = new FormData(); 
    form.append(files[i].name, files[i]); //create a new form and push the file into it 

    var xhr = new XMLHttpRequest(); //create a new request 
    xhr.upload.onprogress = function (e) { //tell xmlhttprequest what to do on upload progress update 
     var done = e.position || e.loaded, total = e.totalSize || e.total; //onprogress function logs to console the proper percentage 
     console.log('xhr.upload progress: ' + done + '/' + total + ' = ' + (Math.floor(done/total * 1000)/10) + '%'); 
    }; 
    xhr.open("post", "/api/contact", true); //open request 
    xhr.send(form); // send form 

} 

}); 

控制檯從三種文件未遂

Index:91 1184x1600.png; image/png; 1467392 
Index:91 Example.pdf; application/pdf; 65391 
Index:91 FileZilla_3.27.0.1_win64-setup.exe; application/x-msdownload; 7873888 
Index:98 xhr.upload progress: 65588/65588 = 100% 
Index:98 xhr.upload progress: 65536/1467587 = 4.4% 
Index:98 xhr.upload progress: 32768/7874140 = 0.4% 
Index:98 xhr.upload progress: 1294336/1467587 = 88.1% 
Index:98 xhr.upload progress: 1425408/7874140 = 18.1% 
Index:98 xhr.upload progress: 1467587/1467587 = 100% 
Index:98 xhr.upload progress: 3915776/7874140 = 49.7% 
Index:98 xhr.upload progress: 6127616/7874140 = 77.8% 
Index:98 xhr.upload progress: 7874140/7874140 = 100%  

回答

2

如果你有一個包含了文件信息的對象,則可以將該對象附加到XHR(xhr.fileInfo = {filename: "" + files[i].name}),並在你的事件處理對象應該是可用的。

+0

是否有一個原因,這將通過循環循環持續,導致所有消息顯示進度,但只有最後一個文件的文件名?我發誓這個工作昨天,現在它只顯示最後一個文件的名字... – Ibrennan208

+0

如果你沒有聲明變量爲本地塊,你可能會得到一個不斷被覆蓋的全局。它可能不是對象中的文件名 - 它可能是用作顯示/日誌過程一部分的臨時變量。 – theGleep

+0

當你說「聲明變量爲塊的本地變量」時,你的意思是在''''onprogress'''方法中創建一個名稱變量嗎?或者你的意思是我應該在上傳功能中創建一個名稱變量? – Ibrennan208

相關問題