将图像从Android上传到C#会导致错误和格式错误的图像

时间:2016-10-28 02:38:50

标签: c# android asp.net bitmap multipartform-data

我正在尝试从手机中选择一张图片并将其上传到C#.Net Web服务。 移动应用程序可以连接到其他.Net服务组件。

当我尝试上传PNG时,Android应用程序和.Net服务器端应用程序之间的图像文件大小(以字节为单位)会发生变化。我使用Wireshark来跟踪流量,它表明PNG格式不正确。

104 6.538812    192.168.1.1 192.168.1.2 HTTP    992 POST  PostSave HTTP/1.1  (PNG)[Malformed Packet]

这是Android代码段,用于查找图像并将其转换为字节数组。

inputStream = getContentResolver().openInputStream(uri);

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);

imageBytes = byteArrayOutputStream.toByteArray();

这是Android代码段,它使用dataoutputstream将PNG添加到httpurlconnection。

dataOutputStream.writeBytes(Constants.FORM_BOUNDARY +
                                "Content-Disposition: form-data; name= \"file_" + fileUpload.getAlias() + "\"; filename=\"" + fileUpload.getDisplayName() + "\"\r\nContent-Type:" + fileUpload.getMimeType() + "\r\n");

dataOutputStream.write(fileUploads.get(i).getByteArray(), 0, fileUploads.get(i).getByteArray().length);


dataOutputStream.writeBytes("\r\n");

这是导致.Net端异常的代码

fileStream = File.OpenRead(file.TempFilePath)    
Image.FromStream(fileStream)

.Net异常消息如下。

{"Parameter is not valid."}

我可以在Temp文件夹中看到该文件,它看起来不是一个格式正确的PNG,无法使用图像查看器打开。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题,这在Android和.Net之间发送数据时似乎很常见,详细信息是错误发生的地方。额外的换行符意味着在服务器端正确读取了图像。

dataOutputStream.writeBytes(Constants.FORM_BOUNDARY +
                            "Content-Disposition: form-data; name= \"file_" + fileUpload.getAlias() + "\"; filename=\"" + fileUpload.getDisplayName() + "\"\r\nContent-Type:" + fileUpload.getMimeType() + "\r\n\r\n"");