IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> django 自定义路径上传照片 文件 返回前端文件流 -> 正文阅读

[Python知识库]django 自定义路径上传照片 文件 返回前端文件流

为什么要指定以上传照片呢 以为传统的使用models表 sttings配置 路由配置 这样的路径就写死了

# 实现 #文件重命名 通过用户user_id创造对应的用户文件夹 使用PIL包保存照片 获取旧照片信息 更新照片数据?删除旧照片

    def put(self,request):
        '''修改用户头像'''
        # 获取上传的文件
        file = request.FILES.get("avatar",None)
        user_id = request.data.get('user_id')
        if file: #修改头像
            file_operate = FileOperate()
            # 命名文件
            filename = file_operate.rename(file.name)
            # 文件不存在创建文件
            file_operate.mkdir(user_id)

            try:
                # 保存图片
                img = Image.open(file)
                path = "./static/%s/%s" % (user_id,filename)
                img.save(r'%s'% path)  # 路径(相对)
            except:
                return JsonResponse(code=400, result={"message":"照片格式错误"})
            user = User.objects.filter(id=user_id).first()
            oldavatar = user.avatar
            # 数据库更改avatar
            user.avatar = filename
            user.save()
            # 删除旧照片
            file_operate.remove(user_id,oldavatar)
            return JsonResponse(code=200, result={"message":"头像修改成功"})

代码里面的内容我给你解释

FileOperate 是我写了一个文件的操作类 #用到了文件重命名 #文件夹不存在就创建 #删除文件 三个方法??JsonResponse 是我设置的返回值? 用到了PIL包保存照片 有一个好处它可以判断是否是照片?

#这是文件操作类? save方法可以保存文件 直接把接收的文件传给他就行

# 创建文件操作类
class FileOperate:
    def __init__(self, file_dir="./static/"):

        self.file_dir = file_dir
    
    #文件重命名
    def rename(self, filename):
        # 获取文件路径文件名
        ext = os.path.splitext(filename)[-1]
        # 生产新文件名
        newfile = uuid.uuid4().hex + ext
        return newfile

    # 创建文件夹
    def mkdir(self, id):
        if not os.path.exists(self.file_dir + '/' + str(id)):
            os.mkdir(self.file_dir + '/' + str(id))

    # 删除文件
    def remove(self, id, filename):
        try:
            os.remove(self.file_dir + '/' + str(id) + '/' + filename)
        except:
            pass

    # 保存文件    
    def save(self,files):
        filename =  os.path.join(self.file_dir, files.name)
        with open(filename, 'wb') as f:
            for file in files.chunks():
                f.write(file)

    #读取文件
    def read_file(self,file_name):
        with open(file_name, "rb") as f:
            while True:
                c = f.read()
                if c:
                    yield c
                else:
                    break

这是 JsonResponse 你也可以用正常的Response 这都是没问题的

def JsonResponse(code: int, result: dict or list = None, error_info: str = "", status=200):
    """
    格式化返回
    """
    return Response(
        data={
            "code": code,
            "result": result if result is not None else {},
            "error_info": error_info,
        },
        status=status,
    )

这就是完成的路径

返回前端文件流?FileOperate类上边有 可以用 Postman 测试下 Send 下拉选择 Send and Download

    def get(self,request):
        
        file_operate = FileOperate()
        file_name = "computer_room.xlsx" 
        file_path = "./asset_manage/asset_template/computer_room.xlsx"
        response = StreamingHttpResponse(file_operate.read_file(file_path))
        response["Content-Type"] = "application/octet-stream"
        response["Content-Disposition"] = 'attachment; filename={0}'.format(file_name)
        response["Access-Control-Expose-Headers"] = "Content-Disposition"  # 为了使前端获取到Content-Disposition属性

        return response

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:19:14  更:2022-03-30 18:20:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:09:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码