Tri*_*ton 6 flash post http actionscript-3
我有一个关于ActionScript 3中POST文件上传的快速问题.我试图通过POST将ByteArray从内存上传到服务器.我正在使用URLRequest类发送数据和URLLoader,因为我想监视进度.相关的代码部分如下:
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);
Run Code Online (Sandbox Code Playgroud)
问题是我设置了我的回调以跟踪上传进度,并且ProgressEvent的bytesTotal属性总是1960(请求的大小减去数据?),即使实际数据大约是20MB并且没有上传文件即使在完成事件发生后也是如此.
我已经使用简单的html表单验证了upload.php的正常运行,我可以验证myByteArray是否包含所有相关数据.谁能告诉我我做错了什么?
编辑:
我尝试了几件我认为应该提及的新事物.第一种是将内容类型设置为application/octet-stream而不是multipart/form-data,除了将字节数增加到1964之外没有任何影响.我还检查了Apache错误日志,发现以下文本重复了很多:
PHP警告:第0行的Unknown中的multipart/form-data POST数据中缺少边界
我猜测Flash无论出于何种原因都没有正确格式化HTTP请求.鉴于我创建了一个FileReference,它使用我为URLLoader设置的相同方法从磁盘上传文件,并获得了预期的结果:bytesTotal属性与文件大小匹配,文件正确上传.
通过这种方式,我发现Adobe开发人员文档中的一个页面提到了使用FileReference.upload()通过设置URLRequest的data参数将数据上传到服务器,所以我尝试了以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
这导致以下输出:
ArgumentError:错误#2127:FileReference POST数据不能是ByteArray类型.
我真的被困在这里了.任何建议,将不胜感激!
您应该向"Content-Type"标题添加更多信息:
uploadRequest.contentType = "multipart/form-data; boundary=<<boundary here>>";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12859 次 |
| 最近记录: |