我正在尝试上传一个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类型。
提前致谢,
答案 0 :(得分:1)
您的请求中的内容类型设置在UploadPostHelper类中。据我所知,它被硬编码为application / octet-stream。如果您只想上传png图像,可以将其更改为image / png。或者,您可以使用另一个URL请求包装器来上载允许您指定文件内容类型的文件。例如MultipartURLLoader。