如何在动作脚本中将二进制内容发送到 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 GWT RPC 序列化在 POST 中将对象从客户端发送到服务器

如何在 Flutter 中将参数传递给动作

如何在 python 中将日志发送到 syslog?

如何在 python 中将二进制图像的内容/对象居中?

如何在 ReactJS 中将数据发送到另一个页面

JSP基本语法总结(jsp工作原理,脚本元素,指令元素,动作元素)