加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 使用URLLoader时出现意外的Flash安全异常

发布时间:2020-12-15 07:31:18 所属栏目:百科 来源:网络整理
导读:我想要完成的是使用URLLoader类和URLRequest将一些二进制数据,特别是表示PNG图像的ByteArray上传到服务器. 当我将URLRequest的contentType属性设置为’multipart / form-data’而不是默认值时,对urlLoader.load()的调用会导致安全异常. 当我将contentType属
我想要完成的是使用URLLoader类和URLRequest将一些二进制数据,特别是表示PNG图像的ByteArray上传到服务器.

当我将URLRequest的contentType属性设置为’multipart / form-data’而不是默认值时,对urlLoader.load()的调用会导致安全异常.

当我将contentType属性保留为默认属性时,它可以正常工作,但需要很长时间(与PNG文件的长度成比例)才能将文件上载到服务器.

所以,我的问题是为什么我得到这个安全例外?我怎么能避免它呢?

请注意,我的SWF是从开发服务器提供的,而不是本地文件系统(准确地说是Google App Engine开发服务器).

这是代码:

var pngFile:ByteArray = PNGEncoder.encode(bitmapData);

var urlRequest:URLRequest = new URLRequest('/API/uploadImage');

// With this line of code,the call to urlLoader.load() throws the following security exception:
// 'SecurityError: Error #2176: Certain actions,such as those that display a pop-up window,may only be invoked upon user interaction,for example by a mouse click or button press.'
urlRequest.contentType = 'multipart/form-data';

urlRequest.method = URLRequestMethod.POST;
urlRequest.data = pngFile;
urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control','no-cache'));

urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE,onUploadComplete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,onUploadError);

NextFrame.addCallback(function () {
    urlLoader.load(urlRequest);
});

解决方法

contentType可能不是指您发送的数据,而是指您收到的数据.尝试设置requestHeaders,它应该工作:

urlRequest.requestHeaders.push(new URLRequestHeader('Content-type','multipart/form-data'));

另外,我在我的一个项目中找到了一段代码.该代码使用POST工作并将一些二进制JPEG数据发送到服务器.我不久前就把它弄了,我无法解释为什么我这样做了,但也许有帮助.我按原样粘贴它:

function sendData(submitPath:String,descriere:String):void {
    // building the url request for uploading the jpeg to the server
    var header:URLRequestHeader = new URLRequestHeader('Content-type','application/octet-stream');
    var jpgURLRequest:URLRequest = new URLRequest(submitPath+'/id/'+player.id+'/path/'+player.contentPath.replace('/','')+'/width/'+player.videoWidth+'/height/'+player.videoHeight+'/descriere/'+descriere+'/timp/'+time);
    jpgURLRequest.requestHeaders.push(header);
    jpgURLRequest.method = URLRequestMethod.POST;
    jpgURLRequest.data = screenShot;

    // sending the data to the server
    var sender:URLLoader = new URLLoader();
    sender.load(jpgURLRequest);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读