我有一个关于ActionScript 3中的POST文件上传的快速问题。我试图通过POST上传一个ByteArray通过POST到服务器。我使用URLRequest类来发送数据,而URLLoader是因为我想监视进度。代码的有关章节如下:POST文件上传使用URLRequest
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);
的问题是,我已经把我的回调,以跟踪上传进度,以及ProgressEvent的bytesTotal属性始终是1960年(请求减去数据的大小?)即使实际数据大约为20MB,即使Complete事件触发后也没有文件上传。
我已验证upload.php的功能是否正确,使用简单的html表单,我可以验证myByteArray是否包含所有有问题的数据。谁能告诉我我做错了什么?
编辑:
我已经尝试了几个,我想我应该提到新的东西。首先是将内容类型设置为application/octet-stream而不是multipart/form-data,除了将字节数增加到1964之外,它没有任何效果。我还检查了Apache错误日志,发现以下文本重复了很多:
PHP Warning: Missing boundary in multipart/form-data POST data in Unknown on line 0
我猜测Flash并没有正确地格式化HTTP请求,无论出于何种原因。鉴于我创建了一个FileReference,它使用我为URLLoader设置的相同方法从磁盘上载文件,并获得了预期结果:bytesTotal属性与文件大小匹配并且文件正确上传。
从我在提到使用调用FileReference.upload数据上传到服务器Adobe开发文档发现了一个工作页面()通过设置URLRequest的数据参数,所以我尝试下面的代码:
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.
我真的被困在这里。任何建议,将不胜感激!
你试过 - uploadRequest.contentType = “应用程序/八位字节流”; – Neil 2012-03-05 15:32:35
同样的结果,唯一的区别是bytesTotal是1964(四个额外的字符)。尽管谢谢你的建议! – 2012-03-05 21:06:45
对有兴趣的人进行快速更新。我检查了Apache错误日志,并试图将文件结果上传到这一行:“PHP警告:缺少第0行未知的多部分/表单数据POST数据中的边界” – 2012-03-05 21:44:36