2012-02-12 62 views
2

看起來,FileReference.upload()是您可以在Flash中將文件上載到服務器並通過PROGRESS回調獲取有關其上載狀態的反饋的唯一方式。所有其他方法都會進入以太網並在文件上傳完成時返回。是否可以在後臺將文件轉換爲FileReference?

不幸的是,FileReference似乎堅持要求用戶選擇要上傳的文件。似乎沒有通過代碼設置文件的機制。我需要這樣做的原因是我允許用戶上傳大量文件並將它們分塊上傳,因此,我只想將一大塊數據打包到FileReference中(可能是5或10兆),然後將其發送出去看它走了。有沒有人有任何想法是否可以手動將數據加載到FileReference對象中?數據屬性是隻讀的,遺憾的是。對此的任何和所有建議將被仁慈對待:)

回答

0

是的,這應該是不可能的,這是一個安全措施。即如果用戶沒有明確選擇要發送的文件,您將無法從用戶的PC發送隨機文件。

但是,如果以不同的方式進行設計,您可以監控上傳。例如,您可以使用URLStream或Socket或NetConnection發送您想要的任何數據,並配置服務器以您需要的方式進行響應。例如,URLStream提供了可用於發送和接收數據的讀/寫流。然後,您可以將它用於某種緩衝區:發送緩衝區的內容,等待服務器確認收到的數據,重新填充緩衝區,重複。

編輯:所以我猜我們正在談論AIR應用程序(因爲你提到文件)?因此,您可能使用FileStream打開文件,並希望通過使用FileReference.upload()發送剛剛收到的數據塊 - 是否正確?那麼,似乎FileReference無法默默地做。儘管如此,我還是會使用URLStream來分割要上傳的大塊數據,比如100個部分,然後在配置爲接受它的服務器腳本的接收OK之後發送每個部分。通常,文件上傳是由HTTP服務器直接處理的,但您的情況需要一些額外的工作,即啓動一個腳本來協商「包」大小,接收包並確認接收。對於可能超時的服務器腳本而言,這可能不那麼重要,但肯定必須有解決方案。

或者,您可以配置您的HTTP服務器,以便在接收到套接字策略請求後提供套接字策略,之後,您可以連接到套接字並僅複製通常通過FileReference或類似方法發送的multipart-form-data類請求HTML控件。 (我可能會選擇這種方式,如果它不是共享主機或其他任何會阻止我配置服務器的東西)。

+1

URLStream在不能被用來監控緩衝區的上傳進度。我已經在做你正在描述的內容,但緩衝區的上傳是一個黑盒子。我認爲,因爲它們提供了我想作爲FileReference一部分的確切功能,所以我想用它來上傳除引用文件外的東西。看起來像是一種奇怪的方式來打破他們的功能。 – 2012-02-12 07:57:26

相關問題