2017-12-18 10 views
0

Google Cloud Storage에 모든 유형의 파일 (BZ2, csv, txt 등)을 업로드하는 기능의 일부로 스칼라 응용 프로그램을 만들었습니다.signUrl을 사용하여 Google Cloud Storage에 파일 업로드 및 응용 프로그램 사용

직접 업로드를 사용하면 작은 파일에는 잘 작동하지만 큰 파일을 업로드하려면 Google에서 "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

찾고 있지 않기 때문에 오류가 표시되지 않습니다. A 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()