django上传图片:html
from PIL import Image def UploadImage(request): if request.method == 'POST': content = request.FILES['ImageField'] try: img = Image.open(content) #img.thumbnail((500,500),Image.ANTIALIAS)#对图片进行等比缩放 img.save("abv.png","jpg")#保存图片 except Exception,e: return HttpResponse("Error %s"%e) return HttpResponse("ok") return HttpResponse("error")
测试html:python
<body> <div class="file-box"> <form action="http://127.0.0.1:8000/UploadImage" method="post" enctype="multipart/form-data"> <input type='text' name='textfield' id='textfield' class='txt' /> <input type="file" name="ImageField" class="file" id="ImageField" size="28" onchange="document.getElementById('textfield').value=this.value" /> <input type="submit" name="submit" class="btn" value="upload" /> </form> </div> </body>
通常结果是有问题的:django
会有个403错误,解决办法:服务器
找到setting.py 注释掉:
app
#'django.middleware.csrf.CsrfViewMiddleware',
上传成功后能在当前目录中显示出来,可是没法用url访问,解决办法:dom
找到url.py增长:post
url(r'^images/(?P<path>.*)','django.views.static.serve',{'document_root':'/'}),
上面是在正常服务器上使用django上传图片的办法,若是你的服务器是sae,那对不起你没有权限这么存文件测试
解决的办法就是使用storage,首先在你的sae中建立一个sroragethis
修改上传图片代码:url
def UploadImage(request): if request.method == 'POST': content = request.FILES['ImageField']#picfile要和html里面一致 from os import environ online = environ.get("APP_NAME", "") if online: import sae.const access_key = sae.const.ACCESS_KEY secret_key = sae.const.SECRET_KEY appname = sae.const.APP_NAME domain_name = "images" #刚申请的domain import sae.storage s = sae.storage.Client() ob = sae.storage.Object(content.read()) url = s.put(domain_name, content.name, ob) return HttpResponse("ok") return HttpResponse("error")
有人会问,上传成功了怎么显示出来呢?
在你的storage点击图片就知道地址了。