无法从Android平板电脑上传图片

时间:2014-12-10 07:38:57

标签: java android

最近我正在开发一个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操作没有问题,但我不知道为什么它在发送字节时不起作用。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用apache commons包中的utils文件上传图像/文件。