最近我正在开发一个Android应用程序,它具有上传照片到Web服务器的功能。上传图片的代码是
URL url = new URL(AideApplication.SERVER + "upload/" + application.getUuid());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Log.i("Upload head image", "URL = " + url);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Length", "" + headImageFile.length());
conn.setRequestProperty("Content-Type", "image/jpeg");
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, os);
os.flush();
os.close();
服务器代码在Tomcat中运行,代码为
private void handleUpload(HttpServletRequest req, HttpServletResponse resp) throws IOException {
InputStream is = req.getInputStream();
File headImageDir = new File("headImages");
File headImageFile = new File(headImageDir, "test.jpg");
headImageFile.createNewFile();
FileOutputStream fos = new FileOutputStream(headImageFile);
byte[] content = new byte[1024];
System.out.println("Begin reading...");
int read = is.read(content), sum = 0;
System.out.println("First read: " + read);
while(read != -1 && sum < length) {
sum += read;
fos.write(content, 0, read);
read = is.read(content);
System.out.println("Reading " + read + " bytes");
}
fos.close();
System.out.println("Reading finishes: " + sum + " bytes in total");
}
问题是:即使我将超时设置为10分钟,我仍然无法从输入流中读取任何内容。这意味着我得到了一个“开始阅读...”,然后该函数被阻止了10分钟并抛出超时异常而没有“首先阅读:......”。
我尝试从Android设备ping Web服务器,Internet连接正常;我也尝试在我的电脑上本地运行上传代码,没有问题,我可以快速完成上传。它真的让我感到困惑,因为使用参数体进行其他HTTP POST操作没有问题,但我不知道为什么它在发送字节时不起作用。谢谢!
答案 0 :(得分:0)
尝试使用apache commons包中的utils文件上传图像/文件。