通过URLRequest上传bytearray

时间:2011-09-04 11:21:50

标签: flex actionscript-3 actionscript

我正在尝试上传一个bytearray,但我正在努力使内容类型像image / png一样(无论我做什么,它总是以application / octet-stream的形式出现。)。

我已经使用Charles Proxy检查了请求,并且可以确认它确实始终作为application / octet-stream。

我的代码是:

protected function onObjectLoaded(event:Event):void
{
    var byteArray:ByteArray = new ByteArray();
    var fileName:String = fileReference.name;
    var uploadPath:String = serviceURL;
    var parameters:Object = new Object();
    parameters.key = serviceKey;

    fileReference.data.readBytes(byteArray,0,fileReference.data.length);

    var urlRequest:URLRequest = new URLRequest();
    urlRequest.url = uploadPath;
    urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = UploadPostHelper.getPostData(fileName, byteArray, "fileupload",  parameters);
    urlRequest.requestHeaders.push( new URLRequestHeader( 'Content-type', 'image/png' ) );

    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    /*urlLoader.addEventListener(Event.COMPLETE, onComplete);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
    urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);*/
    urlLoader.addEventListener(Event.COMPLETE, processResults);
    urlLoader.load(urlRequest);
}

如您所见,我将内容类型作为“multipart / form-data”传递。我已经尝试将它作为image / png传递,这使得请求本身像预期的那样以image / png运行,但是,图像本身仍然作为application / octet-stream。

以下是我的请求现在的样子:

  

- rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition:form-data;   名称= “键”

     

WZL0NXBE6dcb9af80668bb96b86fa72f5595422c   --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition:form-data;   NAME = “文件名”

     

Canada.png   --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition:form-data;   NAME = “文件上传”; filename =“Canada.png”内容类型:   应用/八位字节流

     

PNG - 此处作为bytearray加载图像信息

正如您所见,Canada.png正在作为application / octet-stream传入。我已经摆弄了这个请求,并且已经手动使其工作,关于我的服务器期望接收的内容,这与上面完全相同,但是它说:

  

Canada.png   --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition:form-data;   NAME = “文件上传”; filename =“Canada.png”内容类型:   的应用/八位字节流

应该说:

  

Canada.png   --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition:form-data;   NAME = “文件上传”; filename =“Canada.png”内容类型:   的图像/ PNG

我的问题是如何更改它,所以bytearray本身作为image / png而不是octet-stream传入

这个图像是从客户端上传的,并作为FileReference传递,然后我调用load(),然后获取它的“data”属性,这是bytearray所在的位置。

这里的任何帮助都会非常感激,因为我几个小时都在努力,但似乎无法改变bytearray的mime类型。

提前致谢,

1 个答案:

答案 0 :(得分:1)

您的请求中的内容类型设置在UploadPostHelper类中。据我所知,它被硬编码为application / octet-stream。如果您只想上传png图像,可以将其更改为image / png。或者,您可以使用另一个URL请求包装器来上载允许您指定文件内容类型的文件。例如MultipartURLLoader