python中文件的上传和文件下载或字符串转文件对象下载

1、上传
使用form-data的方式,上传文件,后端接收:

files = request.FILES.getlist("files)
for file in files:
	file_name = file.name  # 文件名
	with open("xxxx+文件名", “wb”)as f:
		# 方式1:对于不是很大的文件可以直接读取写入
		# file_content = file.read()
		# f.write(file_content)
		# 方式2: 对于很大的文件,分次写入
		for chunk in f.chunks():
			f.write(chunk )
	

2、下载
第一种是文件真实存在时,读取文件返回

from django.http import FileRespone
from django.utils.encoding import escape_uri_path


with open("文件路径", "rb") as f:
	res = FileRespone(f)
	res["Content-Type"] = "application/octet-stream"
	# escape_uri_path用于解决中文名称无法下载问题
	res["Content-Disposition"] = "attachment; filename*=utf-8'' {}".format(escape_uri_path(file_name))
return JsonRespone(res)

第二种是没有文件,而是将字符串转为文件对象后下载

import tempfile
from django.http import FileRespone
from django.utils.encoding import escape_uri_path


# 下载文件的文件名
file_name = "文件.txt"
# 下载的内容
str = "下载文件内容".encode("utf-8")
str1 = "下载文件内容"
# 转换为文件对象,默认为wb方式打开的,所以我这里进行了编码
# 方式1 :使用 tempfile模块创建临时文件,我使用了方式1,方式2没有细测
file_like_obj = tempfile.NamedTemporaryFile()
file_like_obj.name = file_name
file_like_obj.write(str)
# 这里指针会指向最后,如果需要读文件内容需要调整文件指针
file_like_obj.seek(0)  
# 方式2 
# import io
# f = io.StringIo(str1)

# 将文件对象返回
res = FileRespone(file_like_obj)
res["Content-Type"] = "application/octet-stream"
# escape_uri_path用于解决中文名称无法下载问题
res["Content-Disposition"] = "attachment; filename*=utf-8'' {}".format(escape_uri_path(file_name))

# 最后关闭这个临时文件
file_like_obj.close()
return JsonRespone(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值