2017-12-18 10 views
0

Google Cloud Storageにあらゆる種類のファイル(BZ2、csv、txtなど)をアップロードするScalaアプリケーションを作成しました。Google Cloud StorageにsignUrlでファイルをアップロードしてアプリケーションを使用する

ダイレクトアップロードは小さなファイルでは問題なく、大きなファイルをアップロードする場合は「signUrl」を使用することをお勧めします。これはファイルを作成していないか、ファイルを作成する前にファイルを更新するか、エラーの例外。

val storage: Storage = StorageOptions.getDefaultInstance.getService 
val fileContent = Files.readAllBytes(file.toPath) 
val fileId: BlobId = BlobId.of(bucketName, s"$folderName/$fileName") 
val fileInfo: BlobInfo = BlobInfo.newBuilder(fileId).build() 
storage.create(fileInfo, fileContent) 

ドント作業:

val storage: Storage = StorageOptions.getDefaultInstance.getService 
val outputPath = s"$folderName/$fileName" 
val fileInfo: BlobInfo = BlobInfo.newBuilder(bucketName, outputPath).build() 
val optionWrite: SignUrlOption = Storage.SignUrlOption.httpMethod(HttpMethod.PUT) 
val signedUrl: URL = storage.signUrl(fileInfo, 30, TimeUnit.MINUTES, optionWrite) 
val connection = signedUrl.openConnection 
connection.setDoOutput(true) 
val out = connection.getOutputStream 

val inputStream = Files.newInputStream(file.toPath) 
var nextByte = inputStream.read() 
while (nextByte != -1) { 
out.write(nextByte) 
nextByte = inputStream.read() 
} 
out.flush() 
inputStream.close() 
out.close() 

私は読んでみてください/バイトによる書き込みバイト、使用してバイトの配列、およびOutputStreamWriterをどちらも仕事を使用して、小さなファイルと

作品。 - 私が使用して

ライブラリがある:これが機能しない理由

"com.google.cloud" % "google-cloud-storage" % "1.12.0" 

誰もが知っていますか? ありがとう

+0

どのようなエラーが表示されますか?最も詳細な情報を提供します。 – Ossip

+0

エラーはありません。そのため、他に何か変更や検索が必要なのか分かりません。 実行は例外なく終了しますが、ストレージに何もしません(ファイルを作成したりファイルを更新していない場合) – Marino

+0

探していないのでエラーは表示されません。 403禁止されても例外はスローされません。 connection.getResponseCode()を呼び出してみてください。 –

答えて

0

signURLを使用せずにGoogleのストレージに大きなファイルを書き込む簡単な方法が見つかりました。

誰かが役に立つと思った場合に備えて、コードを追加します。

storage.create(fileInfo) 
var writer:WriteChannel = storage.get(fileInfo.getBlobId).writer() 
var inputStream: InputStream = Files.newInputStream(file.toPath) 
val packetToRead: Array[Byte] = new Array[Byte](sizeBlockDefault toInt) 
while (inputStream.available() > 0){ 
    val numBytesReaded = inputStream.read(packetToRead,0,sizeBlockDefault toInt) 
    writer.write(ByteBuffer.wrap(packetToRead, 0, numBytesReaded)) 
} 
inputStream.close() 
writer.close() 
関連する問題