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

u0njafvf  于 2023-06-25  发布在  Go
关注(0)|答案(3)|浏览(149)

使用django将文件发送到Google云存储的最佳方式是什么?
现在我用post方法获取文件

file = request.FILES['image']

但当我想把他送到GCS

from google.cloud import storage
    client = storage.Client(projectName)
    bucket = client.get_bucket(bucketName)
    blob = bucket.blob(fileName)
    blob.upload_from_filename(file)

我得到这个错误的InMemoryUploadedFile,所以我必须保存文件在一个临时和之后,发送到GCS,但它是缓慢的。

neekobn8

neekobn81#

这就是我通过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("sandbox-bucket-001")
  blob = bucket.blob(file.name)
  blob.upload_from_string(file.file.read())

该文件作为formdata发送,在本例中,上传的文件包含在名为file的键中,file python变量是InMemoryUploadedFile对象,file.name包含上传文件的实际名称

oyxsuwqo

oyxsuwqo2#

错误原因可能是fileNamefile使用错误。尝试将文件与上传请求同步,如下所示:

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.

mwkjh3gx

mwkjh3gx3#

看起来上面的方法不起作用。我用这种方式做了一件事

file_info= request.FILES['file']
bucket = storage_object.get_bucke`enter code here`t('bucket-name')
blob = bucket.blob('filename')
blob.upload_from_file(file_info.file, content_type='image/jpeg', 
rewind=True)

相关问题