我正在玩一个
django应用程序来为我的照片集提供服务.我想我除了如何实现一个API,我可以用来从我的计算机上自动从可可程序(例如Apple Aperture插件)或
python脚本上传图像时,几乎所有事情都被弄清楚了.目标:
>能够在我的计算机上输入用户名和密码,并让脚本登录到服务器
>为每个图像提交文件以及少量元数据
>为每个上传的图像返回唯一ID,以防我想更新服务器上的文件
经过一些研究,这似乎是各种REST框架可以帮助的东西,虽然它们看起来像是一个解决这个简单问题的大锤.两个问题:
>如何在上传文件之前正确验证我的用户脚本?
>我如何实际上传文件?客户端和服务器REST API通常专注于json / xml交互,似乎对文件没有帮助.
任何更一般的指导或示例将不胜感激.
解决方法
最简单的方法是让一个受
this snippet for basic auth保护的视图简单地验证一个表单.表单可以验证元数据,并包含一个文件上载字段,该字段将自动处理在服务器上接收和存储文件.然后,只需使用POST上传数据即可.
例如
class FileUploadForm(Form) title = CharField() picture = FileField() @logged_in_or_basicauth(realm="FileUpload") def upload_view(request): if request.method == "POST" data = FileUploadForm(request.POST,request.FILES) if data.is_valid(): #save out the file to the webserver here else: raise Exception('Data not valid! did you forget enctype="form/multipart"?') else: return HttpResponseForbidden("You do not have permission to access this resource")
这样做的好处是您可以轻松地将此视图用作网页的目标.
客户端:
python:请参阅http://www.voidspace.org.uk/python/articles/authentication.shtml以与基本身份验证服务器进行交互.
卷曲:
curl http://name:passwd@domain/upload/ -T uploadablepic.jpg -d title=holiday&date=2012-10-02