【问题标题】:How to upload file to s3 bucket with django rest framework api如何使用 django rest framework api 将文件上传到 s3 存储桶
【发布时间】:2021-08-16 22:15:57
【问题描述】:

我正在尝试将文件上传到 Django 项目中的 AWS 存储桶

@api_view(['POST'])
def upload_image(request):
        image = request.FILES['image']
        file_name = request.POST.get('file_name')

    access_key = settings.AWS_ACCESS_KEY_ID
    access_secret_key = settings.AWS_SECRET_ACCESS_KEY
    bucket_name = settings.AWS_STORAGE_BUCKET_NAME 
# bucket_name value is "https://s3.region.amazonaws.com/bucket_name/sub_bucket_name/" 
# I am not sure if it is correct way to give bucket name where I want my file to be uploaded

    
    client_s3 = boto3.client(
        's3',
        aws_access_key_id = access_key,
        aws_secret_access_key= access_secret_key
    )

    client_s3.upload_file(
          file_name,
          bucket_name,
          image
    )

    url = f'{end_point}{bucket_name}/{file_name}'

    return Response({'success': True,
                     'message': "File has been uploaded",
                     'url': url
                     },
                    status=status.HTTP_200_OK)

这就是我通过邮递员将文件和文件名传递给api的方式。 我得到的错误是 - "FileNotFoundError: [Errno 2] No such file or directory: "name of file""

我已阅读教程,使用 boto3 将文件上传到 s3 存储桶看起来相当简单。但是,有些我无法上传文件。

【问题讨论】:

    标签: python-3.x django amazon-s3 django-rest-framework boto3


    【解决方案1】:

    如果这是您的存储桶网址:

    https://s3.region.amazonaws.com/bucket_name/sub_bucket_name/
    

    然后

    file_name = 'yourlocalfile.jpg'
    bucket = 'bucket_name'
    key = 'sub_bucket_name/myfile.jpg'
    
    client_s3.upload_file(file_name, key, ExtraArgs={'ContentType': 'image/jpeg'})
    

    【讨论】:

    • 是不是要先把文件保存在本地,也就是请求过来的,然后给出文件的地址,还是直接在upload_file参数中提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2018-03-18
    • 1970-01-01
    • 2019-10-26
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多