2012-03-04 24 views
6

ActionScript 3'te POST dosya yüklemeleri ile ilgili hızlı bir sorum var. POST üzerinden bir sunucuya bir ByteArray yüklemeye çalışıyorum. Verileri izlemek için URLRequest sınıfını ve URLLoader kullanıyorum çünkü ilerlemeyi izlemek istiyorum. kodun ilgili bölümleri şöyledir:URLRequest kullanarak POST dosya yükleme

var uploadRequest:URLRequest = new URLRequest("http://127.0.0.1/upload.php"); 
uploadRequest.method = URLRequestMethod.POST; 
uploadRequest.contentType = "multipart/form-data"; 
uploadRequest.data = myByteArray; 

var uploader:URLLoader = new URLLoader; 
uploader.addEventListener(ProgressEvent.PROGRESS, onUploadProgress); 
uploader.addEventListener(Event.COMPLETE, onUploadComplete); 
uploader.dataFormat = URLLoaderDataFormat.BINARY; 
uploader.load(uploadRequest); 

Sorun yükleme ilerleme izlemek için benim geri aramalar kurdum ve ProgressEvent bytesTotal özelliği her zaman 1960 olduğudur (istek eksi verilerin boyutu?) Gerçek veriler 20MB civarında olsa da ve Komple etkinlik tetiklendikten sonra bile dosya yüklenmez.

upload.php dosyasının basit bir html formuyla doğru şekilde çalıştığını doğruladım ve myByteArray öğesinin söz konusu verilerin tamamını içerdiğini doğrulayabiliriz. Bana yanlış yaptığımı söyleyen var mı?

Düzenleme: Söz gerektiğini düşündüm yeni birkaç şey teşebbüs ettik

. Birincisi, içerik türünü 1964'e kadar bayt sayısını arttırmaktan başka bir etkisi olmayan multipart/form-data yerine application/octet-stream olarak ayarlıyor. Ayrıca Apache hata kaydını da kontrol ettim ve aşağıdaki metni çok tekrarladı :

PHP Warning: Missing boundary in multipart/form-data POST data in Unknown on line 0

Flash herhangi bir nedenle düzgün HTTP isteği biçimlendirme olmadığını tahmin ediyorum. Diskten bir dosya yüklemek için URLLoader için ayarladığım aynı yöntemleri kullanan bir FileReference oluşturduğum ve beklenen sonucu aldığımda: bytesTotal özelliği dosya boyutuyla eşleşti ve dosya doğru şekilde yüklendi. Ben FileReference.upload kullanarak bir sunucuya veri yüklemeden bahseder Adobe geliştirici dokümanlar bir sayfa buldunuz gelen Çalışma

() URLRequest veri parametresini ayarlayarak, bu yüzden aşağıdaki kodu çalıştı:

var uploadRequest:URLRequest = new URLRequest("http://127.0.0.1/upload.php"); 
uploadRequest.method = URLRequestMethod.POST; 
uploadRequest.data = myByteArray; 

fileRef = new FileReference; 
fileRef.addEventListener(ProgressEvent.PROGRESS, onUploadProgress); 
fileRef.addEventListener(Event.COMPLETE, onUploadComplete); 
fileRef.upload(uploadRequest); 

ArgumentError: Error #2127: FileReference POST data cannot be type ByteArray.

gerçekten burada sıkışıp kaldım: aşağıdaki gibi sonuçlanır

. Herhangi bir öneri takdir edilecektir!

+0

denedin - uploadRequest.contentType = "application/octet-stream"; – Neil

+0

Aynı sonuç, bytesTotal'ın 1964 olduğu tek fark (dört ekstra karakter). Öneri için teşekkürler! –

+0

İlgilenenler için hızlı bir güncelleme. Apache hata günlüğünü kontrol ettim ve dosyaya her girişimi bu satırda yazdım: "PHP Uyarı: Satır 0'da Bilinmeyen'de çoktan/form-data POST verisi eksik sınırı" –

cevap

8
Sen "Content-Type" için daha fazla bilgi eklemek gerekir

başlık:

uploadRequest.contentType = "multipart/form-data; boundary=<<boundary here>>"; 

Kontrol örneği burada: http://marstonstudio.com/?p=36

+0

Çalıştı! Çok teşekkür ederim! Flash'ın benim için sınırları ekleyeceğini düşündüm. Hayır, işe yaramadı. –

+0

Bunu duyduğuma sevindim. :) – deadrunk

+3

Bağlantı bozuk – Soid