我正在使用 Apache Commons IO 的 IOUtils.copy 在 Google Cloud Storage 上制作现有文件的副本。
问题是:如果文件超过 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 的文件),但它也不起作用。