簡體   English   中英

在Apache FileUpload Streaming API中讀取之前確定文件上載的大小

[英]Determine the size of a file upload before reading it all in in the Apache FileUpload Streaming API

有兩種方法可以使用Apache FileUpload Library。

上傳文件

http://commons.apache.org/fileupload/using.html

和Streaming FileUpload API

http://commons.apache.org/fileupload/streaming.html

它們都很好用,除了流API在處理流之前似乎沒有辦法檢查fileSize。

這是因為Streaming API從根本上不知道文件大小,還是因為我需要手動讀取一些標題或其他內容來獲取Multipart上傳大小?

在不占用整個HTTP請求主體的情況下,無法知道多部分請求的一部分的大小。 一旦消耗了HTTP請求主體,就不能停止中途使用它了。 它必須被消耗,直到可以返回響應之前的最后一個字節。 這只是HTTP和TCP / IP的本質。 為了保持較低的服務器內存使用率,您可以在超過大小時丟棄讀取的字節(即在讀取循環內檢查它並且不將它們分配給任何變量)。

最好的辦法是在上傳之前用JavaScript驗證文件長度。 支持 HTML5 File API的瀏覽器支持此功能。 當前版本的Firefox,Chrome,Safari,Opera和Android都支持它。 IE9還不支持它,它將在未來的IE10中使用。

<input type="file" ... onchange="checkFileSize(this)" />

checkFileSize()看起來像這樣

function checkFileSize(inputFile) {
    var max = 10 * 1024 * 1024; // 10MB

    if (inputFile.files && inputFile.files[0].size > max) {
        alert("File too large."); // Do your thing to handle the error.
        inputFile.value = null; // Clear the field.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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