【问题标题】:Upload file to S3 using Ajax and Boto3 for Django使用 Ajax 和 Boto3 for Django 将文件上传到 S3
【发布时间】:2016-06-24 15:48:42
【问题描述】:

我有一个 django 项目,我想将其中的所有图像上传到 S3。我已经安装了 boto3 并且能够打印出我的存储桶。因此我知道我有明确的联系。现在我的下一步是使用 ajax 将文件推送到 S3。以下是我目前的设置。这种方法会奏效吗?我偶然发现的一个问题是 Chrome 返回 C:\fakepath\filename。

Django 视图:

def change_project_image(request):
    image = request.POST['image']

    data = open(image, 'rb')
    s3.Bucket('bucket-name').put_object(Key='filename.jpg', Body=data)

    return HttpResponse('temporary return')

Javascript:

$('#project-image-upload').on('change', function(){
    var image = $(this).val();

    $.post('/project/change-project-image/', {image:image} function(data){

    }, 'json');
});

HTML:

<label class="btn btn-default btn-file">
    Browse <input id="project-image-upload" type="file">
</label>

【问题讨论】:

  • 当你尝试这个时会发生什么?
  • @JordonPhillips 控制台返回 500 错误:IOError at /project/change-project-image/ [Errno 2] 没有这样的文件或目录:u'C:\\fakepath\\e46.jpg '
  • @SamMunroe image = request.POST['image'] 错误显示没有图像。试试request.FILES['image']

标签: ajax django amazon-s3 jquery-file-upload boto3


【解决方案1】:

所以我采取了不同的方法并且能够访问视图中的对象。我将输入添加到一个表单,该表单发布到我想要的视图,然后我像这样处理文件:

def change_project_image(request):
    image = request.FILES['image']
    #now I need to pull the temporary path of image and pass it to boto

    data = open('path_to_file', 'rb')
    s3.Bucket('bucket_name').put_object(Key='filename.jpg', Body=data)

我遇到的问题是我忘记在我的表单中添加 enctype="multipart/form-data" 所以 request.FILES['image'] 是空的。

【讨论】:

  • 临时路径怎么拉?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2019-03-03
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2019-04-29
  • 2017-08-18
相关资源
最近更新 更多