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!
denedin - uploadRequest.contentType = "application/octet-stream"; – Neil
Aynı sonuç, bytesTotal'ın 1964 olduğu tek fark (dört ekstra karakter). Öneri için teşekkürler! –
İ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ı" –