通过RESTful api与django和tastypie发布文件

时间:2011-08-25 16:15:16

标签: django rest tastypie

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

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

所以有人可以解释我如何发布一个包含文件的对象?

2 个答案:

答案 0 :(得分:5)

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

看起来有些方法,但效果不佳。

  

经过很长一段时间玩各种解决方案(https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4ebhttps://github.com/klipstein/django-tastypie/commits/form-data)在tastypie中进行文件处理后,我得出的结论是,如果你想支持文件,这不能优雅地解决从每个浏览器上传。

看看这个叉子

  

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

答案 1 :(得分:1)

将文件序列化为JSON请求是一种稍微尴尬的做事方式,也意味着你失去了一些Django的文件上传自动优点,例如在请求进入时将文件写入内存,并且只切换一旦超过一定大小就将其写入磁盘。

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

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