【问题标题】:django upload file no modeldjango上传文件没有模型
【发布时间】:2012-11-22 03:54:00
【问题描述】:

是否可以在 django 中使用表单中的 FileField 上传文件但没有模型?到目前为止,我只能找到带有模型的示例。我不想在我的数据库中为此创建一个表,我只想上传一个文件。 我的表格:

class csvUploadForm(forms.Form):
    csvFile = forms.FileField(label='Select a CSV file to upload.', help_text='help')

谢谢,

罗曼

【问题讨论】:

  • 您要上传文件进行解析吗?如果是这样,这将起作用。否则你必须指定一个存储位置
  • 是的,我只需要解析它,而不是存储它。有可能吗?

标签: django file upload


【解决方案1】:

示例转载自Django Documentation

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

def handle_uploaded_file(f):
    destination = open('some/file/name.txt', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

您可以将“some/file/name.txt”替换为您想要存储该文件的其他路径。

【讨论】:

  • 但是这样的解决方案缺少模型提供的一项重要功能——存储。如果使用存储在本地文件系统之外存储文件,那么这个处理程序将无法完成这项工作。
  • 我和 Jakub 一起做这个。显然,如果你想在 Django 中上传文件,你希望它使用 Django 的媒体存储。许多人使用 S3 或其他存储解决方案,对这个问题的回答应该考虑到这一点。投反对票。
  • @Marcus Lind Jakub Jagieło 你说的是对的。现在请阅读 rom 关于问题的第 2 条评论。他说“......我只需要解析它,而不是存储它。有可能吗?”我在这里建议的是一种以表格形式捕获上传文件的方法。我刚刚从文档中复制了示例。一旦我们得到文件,我们可以对它做很多事情,比如在内存中解析它,将它存储在本地磁盘或其他地方。我的观点是 rom 不想存储 :)
【解决方案2】:

这在 Django 文档的 File Uploads 部分中有介绍。简而言之,使用request.FILES 中给出的UploadedFile 实例。

【讨论】:

  • 怎么办?文档不清楚。这里的问题是我的文件没有上传到服务器。我已经在我的模板中检查了 settings.py 和 enctype 中的 MEDIA 变量。
猜你喜欢
  • 2012-12-11
  • 2011-03-12
  • 2021-09-19
  • 2015-03-21
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2019-07-23
相关资源
最近更新 更多