我正在尝试使用预先设定的上传网址将图片上传到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);
答案 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的一个函数,因此可能不是 等于字节数组的长度。
修复方法是将字节数组直接写入输出流。