【问题标题】: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
django
file
save
【解决方案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()
这是做什么的:
- 在您的系统上创建一个保存数据的临时文件
- 使用文件字段保存方法来触发通常的文件处理
- 删除临时文件