将图像上传到服务器(服务器上的图像损坏)

时间:2015-01-22 07:12:29

标签: java android

我正在尝试使用预先设定的上传网址将图片上传到S3,其内容类型设置为image/jpeg,方法为PUT。上传后,当我尝试访问S3上的图像时,它似乎已损坏并且大小比本地图像文件大。我的代码如下。

        URL url = new URL(uploadUrl);
        HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
        httpCon.setDoOutput(true);
        httpCon.setRequestMethod("PUT");
        httpCon.setRequestProperty("Content-Type", "image/jpeg");
        OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());

        RandomAccessFile f = new RandomAccessFile(imagePath, "r");
        int length = (int) imagePath.length();
        byte[] imageData = new byte[length];
        f.readFully(imageData);
        String data = new String(imageData);
        out.write(data);
        out.close();

        int responseCode = httpCon.getResponseCode();
        return (responseCode == HttpStatus.SC_OK);

2 个答案:

答案 0 :(得分:0)

由于某些字节尚未写入,我曾经遇到过类似的问题。我能够通过刷新输出流来修复它。

OutputStream out = httpCon.getOutputStream();
....
....
....
....
out.write(imageData);
out.flush();
out.close();

希望对你的情况有帮助。

答案 1 :(得分:0)

从图像数据创建String时,很可能会发生损坏。来自String构造函数String(byte[])的javadoc:

  

通过解码指定的数组来构造一个新的{@code String}   使用平台的默认字符集的字节数。新的长度   {@code String}是charset的一个函数,因此可能不是   等于字节数组的长度。

修复方法是将字节数组直接写入输出流。