我一直在设法在Django上传图像文件。我已经学习过几个教程,它们确实有一点帮助,例如这一个和这里的那个。
虽然他们确实给出了正在发生的事情/如何思考的基本概念,但我还不能将其转移到ProcessedImageField的ProcessedImageField实现。
我的问题是:我有几个ProcessedImageFields。为了上传新图片,我使用一个带有稍微修改过的ClearableFileIput小部件的表单,它在标准的“选择文件”按钮上方显示一个缩略图。这非常好,用户可以选择几个文件(每个字段一个),在保存表单时立即将它们全部上传。我使用S3存储数据,使用django-存储.
我希望能够在这些文件上添加ajax上传功能,这样图像处理就可以从表单保存中分离出来。当用户选择图像时,一旦文件被处理,它应该被上传并更新。然后,只有当用户实际保存表单时,才应该保留对模型的更改,否则就应该丢弃新的文件。
你知道从哪里开始找吗?也许有些项目使用Django-Imagekit使用现有的django ajax库之一?
发布于 2013-11-20 14:50:39
ProcessedImageFields实际上只是在保存映像之前执行图像处理(同步)的普通Django ImageFields,而Django ImageFields实际上只是专门化的FileFields。因此,如果您使用的是ProcessedImageFields,那么与普通表单文件处理没有什么不同;任何关于AJAX上传的非Django特定教程都应该同样适用。
就异步处理映像而言,您可以采取两种方法。
第一种方法是对图像执行一次表单提交,并返回该图像的id,该id可以与第二次提交一起发送到表单的其余部分。在这种情况下,图像的处理是在服务器端同步进行的,但是用户可以在应用程序发生时对其进行其他处理。这使得最后提交的时间更短,因为文件已经发送,但是在成功保存表单之前,图像处理仍然需要完成。您可以尝试查看jQuery-文件上传的Django示例,但我不确定它们有多好或有多相关。
另一方面,如果您想要在服务器上异步地进行图像处理,则要复杂一些。一种方法是在模型上有两个图像单独的字段-一个用于原始图像,一个用于当前处理的图像。在处理表单提交的视图中,您将保存模型中的原始映像,并启动一个异步任务(使用芹菜或类似的方法),该任务处理原始映像,然后将其保存到另一个字段。
至于新文件的丢弃,您可能需要在定期运行的清理脚本中这样做。(您所要求的是图像被保存在服务器上,但在未保存时被丢弃,但服务器永远无法可靠地得到未保存表单的通知。)
https://stackoverflow.com/questions/20075915
复制相似问题