gpt4 book ai didi

c# - 如何将二进制文件从 actionScript 发送到 .net?

转载 作者:行者123 更新时间:2023-11-30 21:50:28 27 4
gpt4 key购买 nike

我有一个 flex 程序 (AS3/Flash),允许用户创建舞台部分的 PNG 图像并通过电子邮件发送它们。这很顺利。

我想拍摄相同的图像并将其发送到剪贴板,但这不起作用。因此,下一个最好的办法是允许他们将其发送到他们的浏览器,他们可以在浏览器中将其保存到文件中。

这是我用来执行此操作的代码;

            bmpPanelData.draw(uiPrintObject)
var baPanel:ByteArray = PNGEnc.encode(bmpPanelData);
// Clipboard.generalClipboard.clear();
// var bolClipboard:Boolean = Clipboard.generalClipboard.setData(ClipboardFormats.BITMAP_FORMAT, baPanel, true);
// trace('bolClipboard=' + bolClipboard);

var strFileName:String = strPrintObject;
var strFileExt:String = "png"
var variables:URLVariables = new URLVariables();
variables.mimeType = "application/octet-stream";
variables.fileExt = strFileExt;
baPanel.position = 0;
var strPanel:String = getBytes(baPanel);
// var strPanel:String = baPanel.readMultiByte(baPanel.bytesAvailable,"latin1");
variables.fileContents = escape(strPanel);
trace('strPanel.length=' + strPanel.length + ' baPanel.length=' + baPanel.length);
variables.disposition = "Attachment";
variables.fileName = strFileName;
var u:URLRequest = new URLRequest( RootDomain + "SendBinaryFile2.aspx");
u.data = variables;
u.method = "POST";
navigateToURL(u,"_blank");
}
catch (err:Error)
{
Alert.show("This Panel cannot be copied to the clipboard. \nSorry for the inconvenience \nError: " + err.errorID,"E-mail not premitted",Alert.OK)
}

(我把剪贴板的东西注释掉了,以防有人知道怎么做。据我所知,您不能将二进制数据从 Flash 发送到剪贴板,但它在 AIR 中有效。)

由于找不到将二进制 ByteArray 转换为字符串的 AS3 方法,我自己编写了名为 getBytes 的方法。如果您知道 AS3 中的方法,请告诉我。

    private function getBytes(baArray:ByteArray):String
{
var strOut:String = "";
baArray.position = 0;
var intBASize:int = baArray.bytesAvailable;
for (var i:int = 0;i < intBASize;i++)
{
strOut += String.fromCharCode(baArray.readByte());
}
return strOut;
}

在 ASPX 端,我有一个名为 SendBinaryFile2.aspx 的文件,如下所示;

<%@ Page Language="C#" validateRequest="false"%>
<script Runat="Server">

void Page_Load(Object sender, EventArgs e)
{
string fileExt = Request.Form["fileExt"];
string mimeType = Request.Form["mimeType"];
string disposition = Request.Form["disposition"];
string fileName = Request.Form["fileName"];
byte [] fileContents = Encoding.ASCII.GetBytes(HttpUtility.UrlDecode(Request.Form["fileContents"]));

Response.Buffer = true;
Response.Clear();
Response.AddHeader("Content-Length", fileContents.Length.ToString());
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", disposition + "; filename=" + fileName + "." + fileExt);
Response.BinaryWrite(fileContents);
Response.Flush();
Response.Close();
Response.End();
}
</script>

结果是一个看起来很像 .PNG 文件的文件,但在打开时已损坏。我直观地比较了通过电子邮件发送的文件和使用 VIM 通过此程序发送的文件,它们看起来很相似,字符数大致相同,以相似的字符开头/结尾。

非常感谢对上述任何项目的帮助。

最佳答案

为您的 getBytes 函数试试这个...

private function getBytes (baArray:ByteArray) : String
{
var strOut:String = ""; var strRead:String = "";
baArray.position = 0;
var intBASize:uint = baArray.length;

for (var i:int = 0; i < intBASize; i++)
{
strRead = baArray.readUnsignedByte().toString(16);

if(strRead.length < 2) { strRead = "0" + strRead; } //# do padding
strOut += strRead ;
}

return strOut.toUpperCase();
}

这应该给你填充字节。考虑 x0FF3 变成没有填充的 xFF3,稍后另一方可能假设字节真的是 xFF30 导致图像损坏。

关于c# - 如何将二进制文件从 actionScript 发送到 .net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com