我正在尝试将文件从 Google App Engine 写入 Google Cloud,并使用后端处理将一堆文件写入 Google 云存储的请求。但似乎我在大约 5 分钟内得到了 IOException(我尝试了不同的文件大小,每个文件的线程休眠 30 秒等,只有时间似乎是一致的)。
然后我测试了以下代码:
String testString = "1,1,1,1,1,1,1,1";
for (int i = 0; i < 200; i++) {
log.info("Dumping file " + i);
String fileName = "test/test" + i + ".csv";
FileService fs = FileServiceFactory.getFileService();
GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
.setBucket(BUCKET_NAME)
.setKey(fileName)
.setAcl("public_read");
AppEngineFile writableFile = fs.createNewGSFile(optionsBuilder.build());
FileWriteChannel writeChannel = fs.openWriteChannel(writableFile, true);
PrintWriter out = new PrintWriter(Channels.newWriter(writeChannel, "UTF8"));
for (int j = 0; j < 10; j++) {
out.println(testString);
}
out.close();
writeChannel.closeFinally();
Thread.sleep(30000);
}
我得到 IOException 如下:
java.io.IOException
at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617)
at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:590)
at com.google.appengine.api.files.FileServiceImpl.create(FileServiceImpl.java:498)
at com.google.appengine.api.files.FileServiceImpl.createNewGSFile(FileServiceImpl.java:153)
在谷歌云存储桶中,11个文件被写入并且是好的(每个有160字节),并且在创建第12个文件时请求失败。对于我的真实应用程序,它将在 writeChannel.closeFinally() 上失败。
java.io.IOException
at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:617)
at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:590)
at com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:551)
at com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:441)
at com.google.appengine.api.files.FileWriteChannelImpl.closeFinally(FileWriteChannelImpl.java:81)
顺便提一句。我确信我授予对我的 GAE 应用程序的 google 服务帐户的完全控制访问权限,以便写入相应的存储桶。
非常感谢!