一般InputStream写入本地文件
/**
* 将InputStream写入本地文件
* @param destination 写入本地目录
* @param input 输入流
* @throws IOException
*/
private static void writeToLocal(String destination, InputStream input){
FileOutputStream downloadFile = null;
try {
int index;
byte[] bytes = new byte[1024];
downloadFile = new FileOutputStream(destination);
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
}catch (IOException e){
e.printStackTrace();
}finally {
if (destination != null){
try {
downloadFile.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (input != null){
try {
input.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
S3ObjectInputStream写入本地文件
通过查看Amazon SDK for Java 1.x文档得到下面示例代码:
S3Object o = s3.getObject(bucket_name, key_name);
S3ObjectInputStream s3is = o.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(key_name));
byte[] read_buf = new byte[1024];
int read_len = 0;
while ((read_len = s3is.read(read_buf)) > 0) {
fos.write(read_buf, 0, read_len);
}
s3is.close();
fos.close();
在demo中可以写入本地文件,文件大小也是对的,但是写入的图片打开失败。网上找了好多写法都不能解决问题,只能自己探索。最后发现一种实现方式可以正确写入文件并且正常打开,具体原理自行摸索。
S3Object o = s3.getObject(bucket_name, key_name);
S3ObjectInputStream s3is = o.getObjectContent();
InputStream inputStream = s3is;
FileOutputStream fos = new FileOutputStream(new File(key_name));
byte[] read_buf = IOUtils.toByteArray(inputStream );
fos.write(read_buf );
s3is.close();
fos.close();