2010-07-12 3 views
1

내 Flex 어플리케이션을 통해 서버에 매우 큰 파일을 업로드해야하며 Flex Filereference upload()가이를 처리 할 수있는 것으로 보입니다. upload() 메서드는 서블릿에 '스트림'을 업로드합니까, 아니면 전체 ByteArray를 전송합니까? (이해할 수 있도록 ByteArray는 전체 파일 내용을 가지므로> 1Gb 파일이 내 메모리에 넘치게됩니다).Flex FileReference upload() 및 .data ... 이것은 전체 파일을 메모리에로드합니까?

나는 어느 쪽인가의 확인을 발견하지 않았다. 그것은 flex.net.FileReference 소스 코드가 플래시의 일부분인데, 오픈 소스 플렉스가 아닌 것 같습니다. 그래서 나는 픽업을 할 수 없습니다.

파일 내용을 서버로 보낼 때 누구나 전체 byteArray 사용을 확인하거나 거부 할 수 있습니까? 매개 변수가 지정되지 않은 경우

감사

+0

내부 구조에 대해서는 잘 모릅니다. 그러나 그것이 작동하는 방식이라고 가정합니다. Flash는 작업을 수행하기 전에 전체 파일을 필요로합니다. 하드 드라이브에서 서버로 "byteArray Streamer"로 작동하지 않습니다. 매우 큰 파일을 다루는 경우 HTTP를 사용하여 해당 파일을 업로드하지 않는 것이 좋습니다. 그것이 의도 된 목적이 아니기 때문입니다. – JeffryHouser

답변

1

Flash를 사용하여 큰 파일을 업로드하려고하면 파일을 메모리에로드하는 것이 가장 큰 걱정거리가 아닙니다. 업로드 자체는 신뢰할 수 없습니다. Flex reference에 따르면 플래시 플레이어는 최대 100MB의 업로드 파일 크기를 공식적으로 지원합니다. 내 경험에 따르면 대용량 파일 업로드가 실패하는 경우가 많습니다. file upload component에서 큰 파일을 업로드하고 부분 업로드를 다시 시작했는지 확인할 수 있습니다. 그러나이 솔루션은 업로드를 시작하기 전에 파일을 메모리에 완전히로드해야합니다.

0

following sample HTTP POST request는 서버 측 스크립트로 플래시 플레이어에서 전송됩니다

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는 파일 업로드에 너무 많습니다 (플래시 여부).

관련 문제