【问题标题】:File posting via RESTful api with django and tastypie使用 django 和 sweetpie 通过 RESTful api 发布文件
【发布时间】:2011-11-03 20:36:44
【问题描述】:

我正在为 Django 网站创建一个 RESTful api。我正在使用tastypie 来做这件事。我的问题是我无法设计如何通过此 api 发布图像或文件。我的意思是,为了在数据库上创建一个对象,我们以 json 格式发布数据。但是我怎样才能在那个 json 里面放一个文件呢?

我发现有两种方法,其中一种是将它们转换为 Base64 格式。我不想使用它,因为在我的测试中,74kb 的图像在转换为 Base64 时为 110kb-120kb。

那么谁能解释我如何发布一个包含文件的对象?

【问题讨论】:

标签: django rest tastypie


【解决方案1】:

将文件序列化为 JSON 请求是一种有点笨拙的处理方式,并且还意味着您会失去一些 Django 的文件上传自动功能,例如在请求进入时将文件写入内存,并且仅切换一旦超过一定大小就将其写入磁盘。

对于文件上传视图,您可能希望退出 sweetpie,并明确编写视图。

然后您可以使用标准的多部分表单(并且像往常一样使用request.FILES 或(更复杂的)create a view that will accept the raw file content 访问文件。

【讨论】:

  • 在tastepie 中我看到了一个名为ImageField 的资源字段。可能是它处理文件上传,但我不知道如何在我的 json 中发送文件。
【解决方案2】:

看这里:https://github.com/toastdriven/django-tastypie/issues/42

看起来有一些方法可以做到这一点,但效果不太好。

在使用各种解决方案(https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4ebhttps://github.com/klipstein/django-tastypie/commits/form-data)进行长时间文件处理后,我得出的结论是,如果您想支持从每个浏览器上传文件,则无法优雅地解决此问题.

看看这个叉子

https://github.com/ff0000/django-tastypie/commit/1fbc0a

【讨论】:

  • 我无法真正弄清楚当前的状态。我们应该以什么方式向tastepie发送文件?
猜你喜欢
  • 2011-10-18
  • 2018-01-06
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多