是这样的,我的 Django 网站上的用户需要直接传图片到七牛,
上传图片我已经处理好了,关键是上传的后续过程。
我把那个用户上传图片后重定向的 returnUrl = "http://localhost:8000/returnpage" 的view
函数这么写:
import base64
import json
def return_page(request):
domain = "ddkanhuo.qiniudn.com" #这是我的七牛空间地址
ret = request.GET['upload_ret'] # 读取返回的upload_ret
fileinfo = json.loads(base64.decodestring(ret))
if fileinfo.get('error'):
error_message = fileinfo['error']
return render(request, 'return_page.html', {'error_message': error_message})
else:
key = fileinfo['key']
public_url = 'http://'+ domain + '/' + key
return render(request, 'return_page.html', {'public_url': public_url})
然后return_page.html
大概是这样的(如果上传发生错误就显示错误消息,上传成功则显示图片):
<html>
.....
{% if error_message %}
{{ error_message }}
{% else %}
<p><img src="{{ public_url }}">
{% endif %}
.....
</html>
但是问题是呢,如果图片上传成功了,确实会按照预想的那样显示图片;
但是如果上传图片失败了,并不会显示错误消息,而会发生错误:MultiValueDictKeyError at /returnpage/
"'upload_ret'"
这个应该怎么办,错误出在哪里的?
Django 新人求教,七牛的文档真是太难懂了...
我也是使用的django,我觉得我的项目没有必要主动上传到七牛,于是我使用了七牛的镜像功能,设置django的MEDIA_URL = 'http://xxxx.qiniudn.com/media/'。直接指向你的子域名,如(http://static.sample.com/)。镜像功能会主动去下载访问到的图片,不需要在程序里主动传到七牛,减少了很多上传失败的风险。缺点是有可能第一次访问该图片的时候速度稍慢,我觉得到是可以接受这个速度。
django项目里的图片如果做了修改,我的做法是在程序里向七牛提交删除key的指令,然后前台访问的时候加上版本参数,如:http://xxxx.qiniudn.com/media/123.jpg?v=123456,可以强制七牛刷新cdn缓存。缺点是好像刷新还是需要一点时间才能同步。