0

我们对此感到困惑,希望能得到一些帮助!

我们的用户正在 Flash 中创建 TIF,并通过 HTTP POST 将 Base64 中的图像数据发布到 ASPX 服务器,该服务器通过以下方式接收它:

byte[] bytes = Convert.FromBase64String(Request.Form["ImgData"]  );

我们发现该方法有效,但在 20-30 种左右的情况下,服务器接收到的数据量与客户端声称发送的数据量不同。ASP 代码:

dataLengthSentFromClient = Request.Form["dataLengthFromClient"].ToString();
<>
ReceivedBytesLength=Request.Form["ImgData"].Length.ToString();

但其他 24 次它似乎工作正常。有任何想法吗?我们不应该以这种方式将数据从 Flash 传递到服务器吗?


(这里是客户端 AS 代码) var image:BitmapData;

if (toTrim) {
tempBitmapData=new BitmapData(workingSrc.width,workingSrc.height,true,0x00000000);
tempBitmapData.draw(workingSrc);
var tempBitmap:Bitmap=new Bitmap(tempBitmapData,PixelSnapping.ALWAYS,true);
bounds=tempBitmapData.getColorBoundsRect(0xFF000000,0x00000000,false);
var letterMatrix:Matrix=new Matrix(1,0,0,1,- bounds.x,- bounds.y);
tempBitmap.transform.matrix=letterMatrix;
image=new BitmapData(bounds.width,bounds.height,true,0x00000000);
image.draw(tempBitmap,letterMatrix);
} else {
image=new BitmapData(workingSrc.width,workingSrc.height,true,0x00000000);
image.draw(workingSrc,letterMatrix);
}


var bytes:ByteArray=PNGEncoder.encode(image);
var base64Bytes:String=Base64.encodeByteArray(bytes);

var vars:URLVariables = new URLVariables();
vars.activityID=activityID;
vars.imgData=base64Bytes;
vars.dataLengthFromSarah=vars.imgData.length;
vars.activityLocation=activityLoc;
vars.op="writePNG";
if (fileName!=null) {
vars.filename=fileName;
}
// Save info about the variables passed in case we need to dump error data
dispatchEvent(new DumpPrepEvent(vars.toString()));

var url:URLRequest=new URLRequest(INTERFACE);
url.data=vars;
url.method=URLRequestMethod.POST;
4

1 回答 1

0

我能想象的唯一原因(假设您使用的每个库都工作正常)是 base64 符号是 urlencoded 但不是 urldecoded。Base64 有“+”,它将在传输后进行 urlencoded,我不确定这个 ASPX 库是否自己进行 urldecode。在这种情况下,即使是几个字节的随机数据,出错的概率也高于 1/25。但可能是您使用的是小尺寸的非随机测试数据。

于 2012-07-10T11:16:01.347 回答