日常学习之:前端传到后端的文件直接上传 chrome cloud 的存储桶(bucket)

2023-12-17 17:04:01
@csrf_exempt
def upload_folder_to_gcs(request):
    folder = request.FILES.getlist('folder')  # 假设前端上传的文件夹字段名为 'folder'
    if not folder:
        return JsonResponse({'error': 'No folder uploaded'})

    # client = storage.Client.from_service_account_json("./chrome cloud 的鉴权文件.json")			# 当鉴权文件存放在本地的时候

    client = storage.Client.from_service_account_info(settings.GS_CREDENTIALS)   # 将鉴权文件直接写在 setting 里面,在 setting中这么写:
    """
    部署的时候通常写在环境变量里面
        if IS_HEROKU_APP:
		    GS_CREDENTIALS = json.loads(os.environ.get('GS_CREDENTIALS')) # 部署的时候没法读,所以读 heroku 的环境变量
		else:
		    with open('./鉴权文件.json', 'r') as f:
		        GS_CREDENTIALS = json.load(f)
    """


	# 提前在 settings 中配置好存储桶的名称
    bucket_name = settings.GS_BUCKET_NAME
    print(bucket_name)

    try:
        bucket = client.get_bucket(bucket_name)
    except Exception as e:
        print(e)
        # 存储桶不存在,创建存储桶
        bucket = client.create_bucket(bucket_name)

	# 遍历所有文件并直接上传到存储桶
    for file in folder:
        blob = bucket.blob(file.name)
        blob.upload_from_file(file)

    return JsonResponse({'message': 'success'})
  • 代码片段是一个用于将文件夹中的文件上传到Google Cloud Storage(GCS)的Django视图函数。以下是该代码的功能概述:

  • 视图函数使用@csrf_exempt修饰符,表示该端点不需要CSRF令牌验证。

  • 它通过字段名 'folder' (原生的 html 表单上传,如果是 vue 的 element-ui 组件,则是用 file 字段)从请求对象中获取上传的文件夹。如果没有上传文件夹,则返回一个带有错误消息的JSON响应。

  • 代码使用在settings.GS_CREDENTIALS变量中提供的Google Cloud Storage凭据来对客户端进行身份验证。凭据可以根据部署情况存储在本地或作为环境变量。

  • GCS存储桶名称在设置文件中预先配置,并使用settings.GS_BUCKET_NAME变量进行设置。

  • 代码尝试使用client.get_bucket()获取指定的GCS存储桶。如果桶不存在,则使用client.create_bucket()创建新的存储桶。

  • 它遍历上传文件夹中的每个文件,并使用blob.upload_from_file()将它们直接上传到GCS存储桶中。

最后,它返回一个包含成功消息的JSON响应,指示文件夹上传到GCS成功。

总体而言,该视图函数处理了将文件夹中的文件上传到GCS的过程,确保进行了必要的身份验证,并正确地将文件上传到指定的存储桶中。

文章来源:https://blog.csdn.net/qq_42902997/article/details/135045905
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。