如何在动作脚本中将二进制内容发送到 servlet
Posted
技术标签:
【中文标题】如何在动作脚本中将二进制内容发送到 servlet【英文标题】:How to send binary content to a servlet in Action Script 【发布时间】:2015-01-06 21:00:18 【问题描述】:我在一个文件中有一个动作脚本函数,它将一个 pdf 文件作为二进制内容发送到一个 servlet,如下所示。
private function savePDF(pdfBinary:ByteArray, urlString:String):void
try
Alert.show("in savePDF urlString" +urlString);
//result comes back as binary, create a new URL request and pass it back to the server
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var sendRequest:URLRequest = new URLRequest(urlString);
sendRequest.requestHeaders.push(header);
sendRequest.method = URLRequestMethod.POST;
sendRequest.data = pdfBinary;
Alert.show("in savePDF calling sendToURL");
sendToURL(sendRequest);
catch(error:*)
Alert.show("in savePDF err" +error);
trace(error);
此代码在 10、11、13 等 flashplayers 版本中运行良好
但在 14.0.0.126 或更高版本等更高版本的 flashplayer 中失败。
我收到以下错误
SecurityError: Error #3769: Security sandbox violation: Only simple headers can be used with navigateToUrl() or sendToUrl().
关于如何解决这个问题的任何建议?
【问题讨论】:
这是一个已知问题,由最新版本的 Flash Player 中的安全更新引起;见forums.adobe.com/thread/1521470 和bugbase.adobe.com/index.cfm?event=bug&id=3759971。 @CyanAngel 的回答将让您发送请求而不会被此安全检查阻止。 在最新版本的 Flash Player 中“使用 FlashVars 变量将数据传递给 swf 文件”是否有任何问题?我将所有变量都设为 null 我不知道。但是,如果您不确定如何传入变量,则要正确处理可能会很棘手。 【参考方案1】:您可以尝试使用URLLoader
而不是sendToURL()
Alert.show("in savePDF urlString" +urlString);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var sendRequest:URLRequest = new URLRequest(urlString);
sendRequest.requestHeaders.push(header);
sendRequest.method = URLRequestMethod.POST;
sendRequest.data = pdfBinary;
Alert.show("in savePDF calling URLLoader");
var loader:URLLoader = new URLLoader();
loader.load(sendRequest);
【讨论】:
如果我使用 URLLoader Error #2044: Unhandled securityError:,我会收到以下错误。 text=错误 #2048:安全沙箱违规: 您可能需要设置跨域策略,请参阅:***.com/questions/5157089/…以上是关于如何在动作脚本中将二进制内容发送到 servlet的主要内容,如果未能解决你的问题,请参考以下文章