Django中move_uploaded_file函数的等效方法

1 投票
1 回答
1361 浏览
提问于 2025-04-16 07:02

我想从表单上传一些文件到云服务器,但不想跳转到那个页面。所以我找到了这个教程,它用的是php/ajax,但里面用到了一个django没有的功能——move_uploaded_file。我该如何在django中实现同样的功能呢?目前我在用django-filetransfers的一部分,但在提交表单后,if request.method == POST后面的代码都没执行:

def upload_handler(request):            
    if request.method == 'POST':
        form = ArtifactSubmissionForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
        return HttpResponseRedirect('/')
    else:    
        upload_url, upload_data = prepare_upload(request, "uploadlink")
        form = ArtifactSubmissionForm()    

    myfileid = create_myfileid()
    return direct_to_template(request, 'rte/artifact_inline.html',
        {'upload_url': upload_url,
        'form': form,
        'upload_data': upload_data,
        'myfileid': myfileid,
        'artifact': artifact,
        'submissions': submissions})

还有html部分:

{% load filetransfers %}

{% block artifact %}
<h1>Submit</h1>
<form action="{{ upload_url }}" method="POST" enctype="multipart/form-data">
    {% render_upload_data upload_data %}
    <table>{{ form }}</table>    
    <p>
        <input type="hidden" maxlength="64" name="myfileid" value="{{ myfileid }}" >
    </p>
    <p>
        <input type="submit" value="Submit" />
    </p>
</form>
{% endblock %}

补充:

我只需要把文件发送到服务器进行后续处理,然后从服务器的响应中读取它们的链接。并不需要把它们当作文件对象使用。

1 个回答

0

django-storages 插件有一些功能,可以让你自动把上传的内容存储到你选择的地方。它有个让人烦恼的地方,就是需要和你的 MEDIA_URL 关联,不过这只是代码上的问题,你可以找到解决办法。

源代码可以在这里找到:Django storages

我建议你在网上找找看有没有你喜欢的。如果你像我现在的工作一样使用 Amazon Cloudfront,选择一个不支持 HTTPS 的签名 URL,可以让我们每次下载省下几毫厘,这样长时间下来也是一笔不小的节省。

撰写回答