我正在使用Apache Commons IO的IOUtils.copy在Google云端存储上制作现有文件的副本。
问题是:如果文件超过1 MB左右,IOUtils.copy
将抛出异常。低于1 mb的文件完全正常。
代码段
AppEngineFile newFile = null;
GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder().setBucket("bucket-name")
.setKey(newFilename).setMimeType("image/jpeg");
try {
//currentFile is an instance of a AppEngineFile
FileReadChannel readChannel = fileService.openReadChannel(currentFile, true);
newFile = fileService.createNewGSFile(optionsBuilder.build());
FileWriteChannel writeChannel = fileService.openWriteChannel(newFile, true);
InputStream inputStream = Channels.newInputStream(readChannel);
OutputStream outputStream = Channels.newOutputStream(writeChannel);
IOUtils.copy(inputStream, outputStream);
outputStream.flush();
outputStream.close();
inputStream.close();
writeChannel.closeFinally();
} catch (IOException e) {
log.warning(e.toString());
}
我还尝试了一种更原始的方法:但它也不起作用
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
while (len != -1) {
outputStream.write(buffer, 0, len);
len = inputStream.read(buffer);
}
我现在的假设:App Engine平台存在某种限制。
注意:我也尝试了IOUtiles.copyLarge
(适用于大于2 GB的文件),但它也不起作用。
答案 0 :(得分:0)
尝试使用小于1mb的缓冲区。最新的appengine版本减少了缓冲区大小。