0

는 최근 google-cloud client를 사용하기 시작, 나는 (/ I는 생략 한 명확성을 위하여 일 변경)이 작은 예제를 만들어 :Google 클라우드 클라이언트를 사용하여 32MB보다 큰 파일을 GCS로 업로드하려면 어떻게해야하나요?

<form id="testform" method="post" enctype="multipart/form-data"> 
    <p> 
    <div> 
     <label for="fotos">Some file</label> 
    </div> 
    <div> 
     <input type="file" name="testfile"> 
    </div> 
    </p> 
    <input type="submit" value="Submit"> 
</form> 
from google.cloud import storage 

class MyHandler(BaseHandler): 
    def get(self): 
     self.render("test.html") 

    def post(self): 
     file = self.request.POST["testfile"] 
     filename = file.filename # + TimeStamp 

     bucket = storage.Client().get_bucket(self.get_bucket_name()) 
     blob = bucket.blob(filename) 

     blob.upload_from_string(data=file.file.read(), 
           content_type=file.type) 

     self.write(blob.public_url) 

이 코드는 32메가바이트에서 아무것도 잘 작동을하지만, 처리 할 수 ​​없습니다 더 큰 파일은 GCS에 직접 전달되는 대신 앱을 통과하기 때문에 Blobstore API를 사용하여 solutions을 보았습니다.하지만 오래된 것이고 Blobstore는 더 이상 데이터를 저장하는 데 사용되지 않습니다 (Blobstore API를 계속 사용할 수는 있지만).

그래서 Google 클라우드 클라이언트를 사용하여이 문제를 해결할 수 있을까요? docs에 업로드 URL을 만드는 방법을 보지 못했습니다.

답변

1

클라이언트는 GCS에 직접 업로드해야합니다. GAE의 단일 연결은 32MB를 초과하여 전송할 수 없습니다.

이미 HTML 양식을 사용 중이므로 문제가되지 않습니다. https://cloud.google.com/storage/docs/xml-api/post-object

앱에 필요한 액세스 권한에 따라 버킷을 공개적으로 액세스 할 수 있도록 설정해야 할 수 있습니다. 그렇지 않으면 PUT 백엔드에서 생성 된 요청에 GoogleAccessId을 지정하고 미리 프런트 엔드에 전송해야합니다.

위에 링크 된 페이지의 끝에 작은 양식 업로드 예가 있습니다.

마지막으로, 개인적으로 AJAX를 사용하여 REST API https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload을 사용하여 파일을 업로드하는 것이 좋습니다. 그러면 오류, 리디렉션 및 성공을 쉽게 처리하는 데 도움이됩니다.

+0

JSON API는 훌륭한 솔루션처럼 들립니다. 그래서 나는 정말로 그 google-cloud 클라이언트가 필요 없다고 생각한다. 감사. –

+0

안녕하세요, Jorge, 아약스를 통해 JSON API를 사용하여 파일을 업로드하는 방법에 대해 알려주십시오. 나는 하루 종일 문서를 읽고 있었지만 구체적인 예를 발견하지 못했습니다. 나는 그저 올바른 방향으로 움직 이기만하면된다. 건배 – Chez