Django文件上传
form-data格式发送
form-data格式上传文件数据,文件对象存储在类字典对象request.FILES中
# print(request.POST.get('xxx')) # xxx
# print(request.POST.get('yyy')) # yyy
# print(request.FILES) # <MultiValueDict: {'file': [<InMemoryUploadedFile: 640.jpg (image/jpeg)>]}>
# print(request.FILES.get('file')) # 640.jpg
上传文件
class UploadedFile在文件上传过程中,实际的文件数据以请求的形式存储。文件这个字典中的每个条目都是一个UploadedFile象(或子类)--一个上传文件的包装器。通常会使用以下方法之一来访问上传的内容:
1.UploadedFile.read() # 从文件中读取整个上传的数据。使用这种方法要小心:如果上传的文件很大,如果你试图把它读入内存,它会使你的系统不堪重负。
2.UploadedFile.multiple_chunks(chunk_size=None) # 判断文件是否足够大,一般为2.5M
3.UploadedFile.chunks(chunk_size=None) # 返回一个生成器对象,当multiple_chunks()为True时应该使用这个方法来代替read()
4.UploadedFile.name # 上传文件的name
5.UploadedFile.size # 上传文件的大小
6.UploadedFile.content_type # 上传文件时的content_type报头,例如(e.g. text/plain or application/pdf)
'''ContentType属性指定响应的 HTTP内容类型。如果未指定 ContentType,默认为TEXT/HTML。'''
8.UploadedFile.charset # 编码
存储文件常见方式
def func(request):
file = request.FILES.get('file')
with open(文件路径, "wb") as f:
for chunk in file.chunks():
f.write(chunk)
"""
循环使用UploadedFile.chunks()而不是使用read()以确保大文件不会占用系统内存。
在UploadedFile象上还有一些其他方法和属性可用;有关完整的参考信息,请参阅UploadedFile
"""
将上传的文件存储在本地
def func(request):
if request.method == 'POST':
# print(request.POST.get('xxx')) # xxx
# print(request.POST.get('yyy')) # yyy
# print(request.FILES) # <MultiValueDict: {'file': [<InMemoryUploadedFile: 640.jpg (image/jpeg)>]}>
# print(request.FILES.get('file')) # 640.jpg
file = request.FILES.get('file', None)
print(file, type(file)) # 640.jpg <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
if file is None:
return JsonResponse({'code': 1000, 'msg': '文件内容为空'})
else:
img_path = os.path.join(settings.BASE_DIR, 'media', file.name)
with open(img_path, 'wb') as f:
for chunk in file.chunks():
f.write(chunk)
return JsonResponse({'code': 200, 'msg': '写入成功'})
return JsonResponse({'code': 1001, 'msg': 'get请求'})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix