我正在尝试从手机中选择一张图片并将其上传到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,无法使用图像查看器打开。
非常感谢任何帮助。
答案 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"");