django中的图片上传和sae服务器问题

django上传图片:

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:

<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中的图片上传和sae服务器问题_第1张图片

会有个403错误,解决办法:

找到setting.py 注释掉:

#'django.middleware.csrf.CsrfViewMiddleware',

上传成功后能在当前目录中显示出来,但是无法用url访问,解决办法:

找到url.py增加:

url(r'^images/(?P<path>.*)','django.views.static.serve',{'document_root':'/'}),


上面是在正常服务器上使用django上传图片的办法,如果你的服务器是sae,那对不起你没有权限这么存文件

解决的办法就是使用storage,首先在你的sae中创建一个srorage

修改上传图片代码:

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点击图片就知道地址了。

你可能感兴趣的:(django,图片,sae,上传,文件)