【问题标题】:django upload file using JSONdjango 使用 JSON 上传文件
【发布时间】:2015-02-03 15:59:30
【问题描述】:

我有这样的 JSON 请求:

object: { "fields":{ "src" : "http://dss.com/a.jpg", "data" : " //file is here" } }

我有这样的模型:

class FileMy(models.Model): f = models.FileField(upload_to='file_path/',)

如何保存文件?

【问题讨论】:

  • 我认为这不是正确的方法,您需要在客户端有一个表单,将文件发布到 django 视图,然后可以将文件保存在文件系统中。您可能不想将 blob 图像存储在数据库中,而只是对文件系统上可以找到文件的位置的引用。此链接可能有助于通过 ajax 将图像发布到 django 视图的上传表单。 waaave.com/tutorial/django/…
  • 谢谢,我拆分了 JSON 和文件数据

标签: json django file save


【解决方案1】:

您可以使用 urllib 读取文件,然后将其添加到您的模型中。

看看这个帖子: Django: add image in an ImageField from image url

【讨论】:

    【解决方案2】:

    您可以将数据包装在从 File 继承的 ContentFile 中,然后将 save 文件直接包装到模型中。

    from __future__ import unicode_literals
    from django.core.files.base import ContentFile
    
    from .models import FileMy
    
    f1 = ContentFile("esta sentencia está en español")
    f2 = ContentFile(b"these are bytes")
    m1 = FileMy()
    m2 = FileMy()
    m1.f.save("filename", f1, save=True)
    m2.f.save("filename", f2, save=True)
    

    【讨论】:

      【解决方案3】:

      首先,将原始数据编码到json请求体中。

      from tempfile import NamedTemporaryFile
      from django.core.files import File
      
      def save_file_to_field(field, file_name, raw_content):
          # field: reference to the model object instance field
          img_temp = NamedTemporaryFile(delete=True)
          img_temp.write(raw_content)
          field.save(
              file_name,
              File(img_temp)
          )
          img_temp.flush()
      

      这是做什么的:

      • 在您的系统上创建一个保存数据的临时文件
      • 使用文件字段保存方法来触发通常的文件处理
      • 删除临时文件

      【讨论】:

        猜你喜欢
        • 2012-07-17
        • 1970-01-01
        • 2011-06-12
        • 2011-03-18
        • 2017-02-14
        • 2010-09-23
        相关资源
        最近更新 更多