【发布时间】:2015-03-28 20:44:19
【问题描述】:
我正在使用 Android 应用上传用相机拍摄的图像。相机返回位图,传给上传任务。服务器接收到图片并保存,但似乎格式错误;我无法查看图像。我对 Android Bitmap.compress() 功能有什么遗漏吗?我不熟悉图像格式,因此非常感谢任何帮助。
这是写位图的代码:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("imageToUpload", "ups.jpg");
String sUserID = Integer.toString(mUserID);
OutputStream os = conn.getOutputStream();
os.write((dbHyphen + boundary + lnEnd).getBytes());
os.write(("Content-Disposition: form-data; name=\"p\"" + lnEnd).getBytes());
os.write(("Content-Type: text/plain; charset=UTF-8"+ lnEnd).getBytes());
os.write(lnEnd.getBytes());
os.write(sUserID.getBytes());os.write(lnEnd.getBytes());
os.write(lnEnd.getBytes());
os.write((dbHyphen + boundary + lnEnd).getBytes());
os.write(("Content-Disposition: form-data; name=\"imageToUpload\";filename="
+ "ups.jpg" + lnEnd).getBytes());
os.write((lnEnd).getBytes());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
mImage.compress(Bitmap.CompressFormat.JPEG, 85, bos);
byte[] bitmapdata = bos.toByteArray();
os.write(bitmapdata);
os.write((lnEnd).getBytes());
os.write((dbHyphen + boundary + dbHyphen + lnEnd).getBytes());
os.close();
编辑:它收到的上传并通过 php 保存
move_uploaded_file($_FILES['imageToUpload']['tmp_name'], $file_path))
【问题讨论】:
-
什么样的服务器?你是责怪服务器还是你的 Android 代码?
-
你上传的文件有多少字节?保存的有多少?
-
上传到web服务器,通过php处理。位图写入的缓冲区在调试器中读取 byte[4505]@3894(需要查找该语法的含义)。复制到我的本地驱动器后的文件读取 4,882 字节。它永远不会被保存为 android 上的实际文件。
-
为什么第二个表单数据没有内容类型image/jpeg?查看保存的文件以查看差异。
-
我尝试添加,但没有运气: os.write(("Content-Disposition: form-data; name=\"fileToUpload\";name="+ "ups.jpg" + lnEnd).获取字节()); os.write(("Content-Type: image/jpeg"+ lnEnd).getBytes()); os.write(("Content-Transfer-Encoding: binary" + lnEnd).getBytes());
标签: android bitmap upload format corrupt