2

ユーザーが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 です。何か案は?

4

2 に答える 2