2010-07-12 50 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对于任何文件上传来说都太多 - 不管是否闪存。

相关问题