在django视图中访问上载的临时文件

时间:2013-04-30 20:36:40

标签: ajax django file-upload

正如标题所说,我想知道如何在视图中上传文件时,从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

1 个答案:

答案 0 :(得分:4)

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

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

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

如果文件权重更大,则会在FILE_UPLOAD_TEMP_DIR的{​​{1}}中以块的形式写入。这是您必须查询的文件,以了解已上载的字节数。

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

另一种方法是创建自己的temporary_file_path,如UploadHandler,然后将其添加到文件上传处理程序中。这是docs推荐它的方式。这里有一些snippetstutorials

如果您需要更多信息,doc的确有详细记录。

我希望你觉得这很有帮助。祝你好运。