使用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,但速度很慢。
答案 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
包含上传文件的实际名称