Django之上传图片
这是一个例子,很多时候,由于前台传过来的内容可能存在差异。但是整个处理逻辑是相同的。
class Upload(View):
def post(self, req):
LOG.info('start upload %s' % req.FILES)
resp = {
"code": 0,
"msg": "",
"data": {
"src": "",
"title": ""
}
}
img_path = req.POST.get('imgpath', None)
if img_path is not None:
img_file = img_path.rsplit('/', 1)[1]
img_file_path = os.path.join(settings.MEDIA_ROOT, img_file);
os.remove(img_file_path)
resp['data']['src'] = img_path
resp['data']['title'] = '删除图片成功'
return HttpResponse(json.dumps(resp), content_type="application/json")
imgs = req.FILES.getlist('file')
for img in imgs:
img_id = str(uuid.uuid4())
img_format = '.' + img.name.rsplit('.', 1)[1]
path = os.path.join(settings.MEDIA_ROOT, img_id + img_format)
with open(path, 'wb') as pic:
for p in img.chunks():
pic.write(p)
resp['data']['src'] = settings.MEDIA_URL + img_id + img_format
resp['data']['title'] = img_id + img.name
return HttpResponse(json.dumps(resp), content_type="application/json")
###上传图片大体思路如下
- 图片源文件,也就是请求里面发送过来的图片
这个文件可以从req当中获取到req.FILES.getlist
或者req.FILES.getlist
- 图片格式,可以从请求的路径当中获取
img_path.rsplit('/', 1)[1]
- 图片名称,一般要重命名,可以使用uuid或者时间戳作为图片的新名称
- 上传的目标地址
settings.MEDIA_ROOT
- 上传文件的大小需要考虑,所有在读取图片的时候,不能直接用
read
读取,而是chunks()