对于大于~1 mb的文件,IOUtils.copy会抛出IOException

时间:2013-05-17 23:29:59

标签: google-app-engine

我正在使用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的文件),但它也不起作用。

1 个答案:

答案 0 :(得分:0)

尝试使用小于1mb的缓冲区。最新的appengine版本减少了缓冲区大小。