2010-07-12 32 views
1

我需要通過我的Flex應用程序上傳一個非常大的文件到我的服務器,並且我看到Flex Filereference upload()似乎能夠處理它。 upload()方法是上傳一個'stream'給servlet,還是它發送整個ByteArray(據我所知,ByteArray將有整個文件內容,所以一個> 1Gb文件將洪泛我的內存)。Flex FileReference upload()和.data ...這是否將整個文件加載到內存中?

我還沒有找到確認一個或另一個。看起來flex.net.FileReference源代碼是flash的一部分,而不是開源flex,所以我無法窺視。

當向服務器發送文件內容時,任何人都可以確認或拒絕整個byteArray的使用情況?

感謝

+0

我不知道內部,但我會假設它是如何工作的。 Flash需要整個文件才能對其執行操作;它不會充當從硬盤到服務器的「byteArray Streamer」。如果你正在處理非常大的文件,我強烈建議不要使用HTTP來上傳所述文件;因爲這不是它的目的。 – JeffryHouser 2010-07-13 00:43:48

回答

1

當試圖使用Flash上​​傳大文件時,將文件加載到內存中並不是您最關心的問題 - 上傳本身是非常不可靠的。根據Flex reference Flash播放器正式支持上傳文件大小高達100 MB。我的經驗證實,大文件上傳通常會失敗。您可以檢查此file upload component上傳大文件並重新開始部分上傳。但是,此解決方案還需要在開始上載之前將文件完全加載到內存中。

0

following sample HTTP POST request從Flash播放器發送到服務器端腳本,如果沒有指定參數:

POST /handler.cfm HTTP/1.1 
    Accept: text/* 
    Content-Type: multipart/form-data; 
    boundary=----------Ij5ae0ae0KM7GI3KM7 
    User-Agent: Shockwave Flash 
    Host: www.example.com 
    Content-Length: 421 
    Connection: Keep-Alive 
    Cache-Control: no-cache 

    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="Filename" 

    MyFile.jpg 
    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="Filedata"; filename="MyFile.jpg" 
    Content-Type: application/octet-stream 

    FileDataHere 
    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="Upload" 

    Submit Query 
    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7-- 

它看起來類似於post request generated by a file input html control。所以它不是ByteArray,但瀏覽器在發送文件之前需要將文件加載到內存中; 1GB對於任何文件上傳來說都太多 - 不管是否閃存。

相關問題