Python3.5 Django1.9.3 图片上传与返回

来源:互联网 发布:js 判断 arguments 编辑:程序博客网 时间:2024/05/16 08:53

Django框架对于静态文件的上传和返回有良好的支持,下面分为图片上传和下载两个部分来简单记录。

文件上传

安卓客户端上传:
点击上传按钮后会像服务器发送一个file,其中file是一个File类型的文件。

User.getInstance().upload(file,"http://192.168.1.104:8000/user/user_upload/");//测试上传图片 User.java文件中,为一个单例 使用android-async-http-1.4.8框架    public void upload(File file, String url)throws Exception{        if (file.exists() && file.length() > 0) {            RequestParams params = new RequestParams();            params.put("username", "ykh");            params.put("headImg", file);            httpClient.post(url, params, new AsyncHttpResponseHandler() {                @Override                public void onSuccess(int i, Header[] headers, byte[] bytes) {                    Log.e("photo", "onSuccess");                }                @Override                public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {                    Log.e("photo", "onFailure");                }            });        }else        {            Log.e("photo", "文件不存在");        }    }

服务器端接收:
在urls中设置对应的路由,不再赘述,upload的file将被存在portrait = models.FileField(upload_to = './upload') #用户头像 (其中upload_to将指定上传后文件的保存目录,我保存在项目的主路径下的upload文件夹下)这样一个modul字段中。
服务器保存接收到的图片的代码如下:

class UserForm(forms.Form):    username = forms.CharField()    headImg = forms.FileField()def user_upload(request):    if request.method == "POST":        uf = UserForm(request.POST,request.FILES)        if uf.is_valid():            username = uf.cleaned_data['username']            badge_image = uf.cleaned_data['headImg']            user = User()            user.username = username            user.portrait = badge_image            user.save()            code = 0    else:        uf = UserForm()        code = 1    data={'code':code}    return HttpResponse(json.dumps(data))

如果不出意外的话你究可以在工程目录下的upload文件夹下看到你在安卓端上传的图片了。

图片下载(图片生成url)

在Django的项目文件夹下的setting.py中添加这样两句话:

HERE=os.path.dirname(os.path.dirname(__file__))STATIC_URL= '/static/'STATICFILES_DIRS = (       os.path.join(HERE,'D:\BitBucket\goSportServer\media').replace('\\','/'),       os.path.join(HERE,'D:\桌面文件夹\photo').replace('\\','/'),)

其中的文件路径对于的就是你电脑或者服务器的物理盘符路径,假设你在D:\桌面文件夹\photo 文件夹下放了一张大图片,像我这样:
这里写图片描述
那么,你现在开启服务后直接在浏览器中输入http://192.168.1.104:8000/static/1.jpg 地址就可以看到这张图片了,具体的原理我也不细说了,大概是static被映射到你的物理路径D:\桌面文件夹\photo上,然后后面跟上你要读取的文件名就可以了。当然,你也可以在STATICFILES_DIRS中写 os.path.join(HERE,’D:\桌面文件夹’).replace(‘\’,’/’),然后在浏览器中输入http://192.168.1.104:8000/static/photo/1.jpg 来读取文件,主要的思想就是你写的static映射的目录在拼接上你在浏览器中输入的static之后的地址形成你服务器或者电脑中对应的预处理的文件的物理地址即可,是不是很简单。
给个效果图:
这里写图片描述

你可以在STATICFILES_DIRS中添加许多物理目录,来实现手工映射,比较麻烦,对静态文件处理有比较高的要求的话可以使用django的自动映射方法。

0 0
原创粉丝点击