使用Django将文件发送到GCS的最佳方法

时间:2017-09-22 05:06:58

标签: python django google-cloud-storage

使用django将文件发送到Google云存储的最佳方式是什么。

这一刻我用post方法获取文件

moment('20170202','YYYY-MM-DD')

但是当我尝试发送给GCS时

file = request.FILES['image']

我得到了这个错误 from google.cloud import storage client = storage.Client(projectName) bucket = client.get_bucket(bucketName) blob = bucket.blob(fileName) blob.upload_from_filename(file) 所以我必须将文件保存在temp中,然后发送到GCS,但速度很慢。

2 个答案:

答案 0 :(得分:1)

错误可能是因为 fileName 文件的使用不正确。尝试使用上传请求同步文件流,如下所示:

from google.cloud import storage

def upload_file(file,projectName,bucketName, fileName, content_type):

    client = storage.Client(projectName)
    bucket = client.get_bucket(bucketName)
    blob = bucket.blob(fileName)

    blob.upload_from_string(
        file,
        content_type=content_type)

    url = blob.public_url
    if isinstance(url, six.binary_type):
        url = url.decode('utf-8')

    return url

进一步阅读,Reference.

答案 1 :(得分:0)

这是我通过 djano 上传文件的方式, 下面显示了我的 django(drf) 视图中的视图方法

def upload_gcp(self, request):
  file = request.data["file"]
  storage_client = storage.Client.from_service_account_json(
        'path-to-credentials-file.json'
    )
  bucket = storage_client.get_bucket("dtime-sandbox-bucket-001")
  blob = bucket.blob(file.name)
  blob.upload_from_string(file.file.read())

文件作为表单数据发送,在这种情况下,上传的文件包含在名为 file 的键和 file python 变量中是 InMemoryUploadedFile 对象和 file.name包含上传文件的实际名称