Django上传文件
一般的情况下,我们可以使用django自带的file和image字段,来实现自动上传文件,不需要额外的代码来实现上传。
在一些自己的页面,就需要手动实现文件上传了,我们这篇文章用原生的方式来实现文件的接收和写入磁盘。
代码如下:
def upload(request):
files = request.FILES
# 只上传一张
rs = {
'status': -1,
'url': ''
}
dir_path = 'uploads/'
base_dir = os.path.join(settings.MEDIA_ROOT, dir_path)
if not os.path.exists(base_dir):
os.makedirs(base_dir)
for i in files:
buffer_file = files.get(i)
name, suffix = os.path.splitext(buffer_file.name)
filename = get_short_id() + suffix
f = open(os.path.join(settings.MEDIA_ROOT, dir_path, filename), 'wb+')
for chunk in buffer_file.chunks(): # 分块写入文件
f.write(chunk)
f.close()
rs['status'] = 0
rs['url'] = os.path.join(
settings.MEDIA_URL, dir_path, filename)
# 如果要传多张,就移除这个break
break
return rs