首页 > 其他分享 >Django文件上传

Django文件上传

时间:2023-05-15 18:34:15浏览次数:34  
标签:文件 UploadedFile get request Django file 上传

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请求'})

标签:文件,UploadedFile,get,request,Django,file,上传
From: https://www.cnblogs.com/XxMa/p/17402769.html

相关文章

  • python基础学习-读写CSV文件
    CSV文件介绍参考:Python-Core-50-Courses/第23课:用Python读写CSV文件.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)CSV 全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据......
  • elk日志收集之rsyslog软连接监控文件深度坑
    业务中通过rsyslog监控本地文件收集了一些redis和mc的慢日志,推到elk集群分析,这些日志一天一个文件,每晚零点5分通过计划任务用软连接的方式将新的文件固定到指定文件下,但是最近发现日志丢了很多,分析中发现了一个深坑,先说下现有的配置:rsyslog的配置如下,监控固定的文件:local6.*......
  • python基础学习-用Python读写Excel文件
    参考链接:Python-Core-50-Courses/第24课:用Python读写Excel文件-1.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)Python-Core-50-Courses/第25课:用Python读写Excel文件-2.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)......
  • web自动化14--读取excel文件
    1、安装xlrd模块,pipinstallxlrd,成功后2、打开exlce表格data=xlrd.open_workbook('test.xlsx')table=data.sheets()[0]          # 通过索引顺序获取sheettable=data.sheet_by_index(0)    # 通过索引顺序获取table=data.sheet_by_name(u'She......
  • 从properties文件获取中文key
    1,修改编码格式为UTF-8 2,对resourceBundle解决实现实体类,修改编码格式packagecom.ruoyi.web.controller.utool;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.nio.charset.StandardCharsets;importjava.util......
  • Java中getResourceAsStream的用法,读取jar里面的文件
    首先,Java中的getResourceAsStream有以下几种:1.Class.getResourceAsStream(Stringpath):path不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。2.Class.getClassLoader.getRe......
  • SpringBoot 文件上传到指定文件夹
    1、在application.yml文件中设置存储文件夹地址upload:path:E:\upload\2、配置映射路径@ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){//其......
  • 通过获取token,对象oss创建桶名称和文件上传
     #!/bin/bash#oss对象存储访问地址sfoss_host="http://fns-css-core-shenzhen-xili1.osssit.sfcloud.local:8080/v1/AUTH_FNS-CSS-CORE/"#获取昨天日期,20230510daysdate=`date-d"3daysago"+%Y%m%d`#设置oss对象存储桶名称yunhu20230510sfoss_bucket="yunhu$......
  • Linux文件查找命令之locate与find
    locate与find是经常使用的Linux 命令,刚接触Linux时对这两个命令的使用傻傻的分不清。现在我们来对比一下两个命令到底有哪些区别。locatelocate让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找......
  • flask(六)---flask上传文件
    文件上传是很常见的功能,但这过程中却有很多技术环节需要学习文件类型,大小限制多文件上传文件名称安全检查1.文件大小限制出于资源考虑,不能不对用户上传的文件大小进行限制,这个在flask中实现非常简单fromflaskimportFlask,Requestapp=Flask(__name__)app.config[......