【问题标题】:Accessing temporary file from upload in django view在 django 视图中从上传访问临时文件
【发布时间】:2013-04-24 21:15:00
【问题描述】:

正如标题所说,我想知道,当上传文件时,在视图中如何访问 Django 存储的临时文件中的数据。

我想读取上传的数据值,以便制作进度条。我的方法是执行 jquery getJSON 请求:

function update_progress_info() {
        $progress.show();
        $.getJSON(progress_url, function(data, status){
            if (data) {
                var progress = parseInt(data.uploaded) / parseInt(data.length);
                var width = $progress.find('.progress-container').width()
                var progress_width = width * progress;
                $progress.find('.progress-bar').width(progress_width);
                $progress.find('.progress-info').text('uploading ' + parseInt(progress*100) + '%');
            }
            window.setTimeout(update_progress_info, freq);
        });
    };

progress_url 是我处理上传文件数据的视图:

# views.py (I don't know what to do here):
def upload_progress(request):
    for line in UploadedFile.temporary_file_path
        response = (line)
    return response

【问题讨论】:

标签: ajax django file-upload


【解决方案1】:

Django 使用在 settings.py 中定义的 UploadHandler 处理上传的文件,名称为 FILE_UPLOAD_HANDLERS,默认为该元组:

FILE_UPLOAD_HANDLERS = 
 ("django.core.files.uploadhandler.MemoryFileUploadHandler",
 "django.core.files.uploadhandler.TemporaryFileUploadHandler",)

文件上传的行为是,如果文件小于 2.5 mg,那么它将保存在内存中,因此,它们不会作为临时文件写入磁盘。

如果文件重量更大,它将在FILE_UPLOAD_TEMP_DIR 中的settings.py 中分块写入。这是您必须查询的文件才能知道已上传了多少字节。

您可以通过views 中的request 变量访问上传/上传的文件,如下所示:file = requests.FILES['file']。在那里,file 变量将具有UploadedFile 类型,其中包含一个方法temporary_file_path,其中包含正在上传的磁盘中文件的地址。 (注意: 只有大于 2.5 mg 的文件才会有这种方法)所以你可能会得到正在上传的文件的大小。

另一种方法是创建您自己的UploadHandler,例如ProgressBarUploadHandler,并将其添加到您的文件上传处理程序中。这是docs 推荐的方式。这里有一些 snippetstutorials 来做这件事。

如果您需要更多信息,doc 确实有据可查。

我希望这对您有所帮助。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多