ユーザーがgaeからクラウドストレージに写真をアップロードできるアプリを書いています。アップロードしたファイルをバイト形式に変換する必要があったため、アップロードは少し面倒でした。次のチュートリアルに従いました: https://developers.google.com/appengine/docs/java/googlestorage/overview
交換しただけ
writeChannel.write(ByteBuffer.wrap
("And miles to go before I sleep.".getBytes()));
と
ByteBuffer buffer = ByteBuffer.wrap(IOUtils.toByteArray(file.getInputStream))
writeChannel.write(buffer)
ここで、いくつかのフォルダー/画像の名前を変更する必要があります。関連するドキュメントを読み、元のファイルを読み込んで新しい場所に書き直そうとしました。しかし、ファイルをバイトファイルとして読み取り、書き直すには多くの問題があります(バイトファイルとして読み取る必要があると思います)。
私の最後の試みは次のようなものでした:
public void copyFile(String from,String to) {
FileService fileService = FileServiceFactory.getFileService
AppEngineFile readableFile = new AppEngineFile(from)
readChannel = fileService.openReadChannel(readableFile,true)
int fileSize = fileService.stat(readableFile).getLength.intValue()
LOG.info("Size int " + fileSize)
ByteBuffer dst = ByteBuffer.allocate(fileSize)
readChannel.read(dst)
//readChannel.close() comment because fails to close the file.
GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
.setBucket("bucket_name")
.setKey(to)
.setAcl("public_read")
AppEngineFile writableFile = fileService.createNewGSFile(optionsBuilder.build())
val writeChannel = fileService.openWriteChannel(writableFile, true)
// This time we write to the channel directly.
writeChannel.write(dst)
// Now finalize
writeChannel.closeFinally()
readChannel.close()
}
このメソッドを使用すると、ファイルが書き込まれますが、バイトは 0 です。何か案は?