当前位置: 首页 > news >正文

uniapp访问django目录中的图片和视频,2025[最新]中间件访问方式

 新建中间件,

middleware.py

匹配,以/cover_image/ 开头的图片

匹配以/episode_video/ 开头的视频

imageSrc: 'http://192.168.110.148:8000/cover_image/12345/1738760890657_mmexport1738154397386.jpg',
videoSrc: 'http://192.168.110.148:8000/episode_video/12345/compress_video_99945997.mp4'

import os
import re
import mimetypes
from django.conf import settings
from django.http import StreamingHttpResponse, Http404, HttpResponseclass VideoStreamMiddleware:"""视频流中间件"""def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 检查请求的路径是否以 '/episode_video/' 开头if request.path.startswith('/episode_video/'):user_id = request.path.split('/')[2]print("request.path----------", user_id)return self.stream_video(request, user_id)# 检查请求的路径是否以 '/cover_image/' 开头if request.path.startswith('/cover_image/'):user_id = request.path.split('/')[2]print("request.path----------", user_id)return self.stream_image(request,user_id)response = self.get_response(request)return responsedef stream_video(self, request, user_id):filename = request.path.split('/')[-1]  # 从路径中提取文件名path = os.path.join(settings.MEDIA_ROOT, 'episode_video/' + user_id, filename)  # 视频文件存储路径print("path是,,,,,,", path)if not os.path.exists(path):raise Http404("File not found")range_header = request.META.get('HTTP_RANGE', '').strip()range_re = re.compile(r'bytes\s*=\s*(\d+)\s*-\s*(\d*)', re.I)range_match = range_re.match(range_header)size = os.path.getsize(path)content_type, _ = mimetypes.guess_type(path)content_type = content_type or 'application/octet-stream'if range_match:first_byte, last_byte = range_match.groups()first_byte = int(first_byte) if first_byte else 0last_byte = first_byte + 1024 * 1024 * 8  # 默认8MB每片if last_byte >= size:last_byte = size - 1length = last_byte - first_byte + 1resp = StreamingHttpResponse(self.file_iterator(path, offset=first_byte, length=length), status=206,content_type=content_type)resp['Content-Length'] = str(length)resp['Content-Range'] = f'bytes {first_byte}-{last_byte}/{size}'else:# 返回整个文件resp = StreamingHttpResponse(self.file_iterator(path), content_type=content_type)resp['Content-Length'] = str(size)resp['Accept-Ranges'] = 'bytes'return respdef stream_image(self, request,user_id):filename = request.path.split('/')[-1]  # 从路径中提取文件名path = os.path.join(settings.MEDIA_ROOT, 'cover_image/'+user_id, filename)  # 图片文件存储路径print("image path是,,,,,,", path)if not os.path.exists(path):raise Http404("File not found")content_type, _ = mimetypes.guess_type(path)content_type = content_type or 'application/octet-stream'# 返回图片文件with open(path, 'rb') as f:response = HttpResponse(f.read(), content_type=content_type)response['Content-Length'] = os.path.getsize(path)return responsedef file_iterator(self, file_name, chunk_size=8192, offset=0, length=None):"""文件迭代器,按块读取文件"""with open(file_name, "rb") as f:f.seek(offset, os.SEEK_SET)remaining = lengthwhile True:bytes_length = chunk_size if remaining is None else min(remaining, chunk_size)data = f.read(bytes_length)if not data:breakif remaining:remaining -= len(data)yield data

不要忘记在settings.py中注册中间件

'user.middleware.VideoStreamMiddleware'

uniapp中 新建界面 访问

<template><view class="container"><text class="title">展示图片和视频</text><!-- 展示图片 --><image :src="imageSrc" mode="aspectFit"></image><video :src="videoSrc" controls></video></view>
</template><script>
export default {data() {return {imageSrc: 'http://192.168.110.148:8000/cover_image/12345/1738760890657_mmexport1738154397386.jpg',videoSrc: 'http://192.168.110.148:8000/episode_video/12345/compress_video_99945997.mp4'};}
};
</script><style></style>

相关文章:

uniapp访问django目录中的图片和视频,2025[最新]中间件访问方式

新建中间件, middleware.py 匹配,以/cover_image/ 开头的图片 匹配以/episode_video/ 开头的视频 imageSrc: http://192.168.110.148:8000/cover_image/12345/1738760890657_mmexport1738154397386.jpg, videoSrc: http://192.168.110.148:8000/episode_video/12345/compres…...

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载&#xff1a;https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开&#xff0c;启动&#xff1a; 日志有报错&#xff1a; 点右侧m图标&#xff0c;maven有以下报误 &…...

python脚本实现windows电脑内存监控内存清理(类似rammap清空工作集功能)

import ctypes import psutil import time import sys import os from datetime import datetime import pyautogui# 检查管理员权限 def is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return False# 内存清理核心功能 def cleanup_memory(aggressivene…...

【狂热算法篇】并查集:探秘图论中的 “连通神器”,解锁动态连通性的神秘力量

嘿&#xff0c;朋友们&#xff01;喜欢这个并查集的讲解吗 记得点个关注哦&#xff0c;让我们一起探索算法的奥秘&#xff0c;别忘了一键三连&#xff0c;你的支持是我最大的动力&#xff01; 欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;深度剖析并查…...

SpringBoot中实现动态数据源切换

SpringBoot中实现动态数据源切换 文章目录 SpringBoot中实现动态数据源切换SpringBoot中实现动态数据源切换基础知识1. 什么是数据源&#xff1f;2. 动态数据源切换的概念3. Spring Boot 中的默认数据源配置4. 动态数据源的挑战5. Spring 中的数据源切换方式 设计思路1. 明确应…...

数据结构及排序算法

数据结构 线性结构 ◆线性结构:每个元素最多只有一个出度和一个入度,表现为一条线状。线性表按存储方式分为顺序表和链表。 存储结构: ◆顺序存储:用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素物理上也相邻。 ◆链式存储:存储各数据元素的结点…...

Python基础-元组tuple的学习

在 Python 中&#xff0c;元组&#xff08;tuple&#xff09;是一种不可变的序列类型&#xff0c;允许存储不同类型的元素。元组非常类似于列表&#xff08;list&#xff09;&#xff0c;但与列表不同的是&#xff0c;元组一旦创建&#xff0c;就不能修改其内容。 1 元组的创建…...

【手写公式识别】MEMix: Improving HMER with Diverse Formula Structure Augmentation 论文阅读

发表于&#xff1a;ICME 2024 原文链接&#xff1a;https://ieeexplore.ieee.org/document/10687521 源码&#xff1a;无 Abstract 手写数学表达式识别&#xff08;HMER&#xff09;旨在将数学表达式&#xff08;MEs&#xff09;的图像转换为相应的LaTeX序列。然而&#xff0…...

使用deepseek写一个飞机大战游戏

说明&#xff1a; 安装pygame&#xff1a;在运行代码之前&#xff0c;需要先安装 pygame 库。可以通过以下命令安装&#xff1a; pip install pygame图像文件&#xff1a;需要将玩家、敌人和子弹的图像文件&#xff08;player.png, enemy.png, bullet.png&#xff09;放在与脚本…...

用Kibana实现Elasticsearch索引的增删改查:实战指南

在大数据时代&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;和 Kibana 作为强大的数据搜索与可视化工具&#xff0c;受到了众多开发者的青睐。Kibana 提供了一个直观的界面&#xff0c;可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…...

C# 封送和远程编程介绍

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 编程领域中&#xff0c;封送&#xff08;Marshaling&#xff09;和远程编程&#xff08;Remote Programming&#xff09;是两个极为重要的概念&#xff0c;它们为开发者提供了与不同环境、不同进程或不同机器上的代码进行交互的…...

MybatisPlus较全常用复杂查询引例(limit、orderby、groupby、having、like...)

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询&#xff08;如 LIMIT、ORDER BY、GROUP BY、HAVING、LIKE 等&#xff09;的引例&#xff1a; 1. 环境准备…...

02.07 TCP服务器与客户端的搭建

一.思维导图 二.使用动态协议包实现服务器与客户端 1. 协议包的结构定义 首先&#xff0c;是协议包的结构定义。在两段代码中&#xff0c;pack_t结构体都被用来表示协议包&#xff1a; typedef struct Pack {int size; // 记录整个协议包的实际大小enum Type type; …...

Jenkins数据备份到windows FTP服务器

文章目录 背景1. 安装配置 FileZilla Server&#xff08;Windows&#xff09;1.1 下载并安装 FileZilla Server1.2 配置 FTP 用户和共享目录 2. 安装并配置 FTP 客户端&#xff08;CentOS&#xff09;2.1 在 CentOS 安装 lftp 3. 编写 Jenkins 备份脚本3.1 赋予执行权限3.2 测试…...

【R语言】卡方检验

一、定义 卡方检验是用来检验样本观测次数与理论或总体次数之间差异性的推断性统计方法&#xff0c;其原理是比较观测值与理论值之间的差异。两者之间的差异越小&#xff0c;检验的结果越不容易达到显著水平&#xff1b;反之&#xff0c;检验结果越可能达到显著水平。 二、用…...

ASP.NET Core托管服务

目录 托管服务的异常问题 托管服务中使用DI 托管服务案例&#xff1a;数据的定时导出 场景&#xff0c;代码运行在后台。比如服务器启动的时候在后台预先加载数据到缓存&#xff0c;每天凌晨3点把数据导出到备份数据库&#xff0c;每隔5秒钟在两张表之间同步一次数据。托管服…...

HarmonyOS 5.0应用开发——全局自定义弹出框openCustomDialog

【高心星出品】 文章目录 全局自定义弹出框openCustomDialog案例开发步骤完整代码 全局自定义弹出框openCustomDialog CustomDialog是自定义弹出框&#xff0c;可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹出框…...

如何在C++ QT 程序中集成cef3开源浏览器组件去显示网页?

文章目录 1. **准备工作**1.1 下载CEF31.2 配置Qt项目2. **集成CEF3到Qt窗口**2.1 创建Qt窗口容器2.2 初始化CEF33. **处理CEF3消息循环**4. **处理多进程架构**5. **完整代码示例**`main.cpp`6. **常见问题**6.1 黑屏问题6.2 窗口嵌入失败6.3 多进程调试7.**Github源码参考**8…...

深入讲解MyBatis

1. MyBatis 的背景和优势 背景&#xff1a;在 Java 开发中&#xff0c;传统的 JDBC 操作数据库代码繁琐&#xff0c;需要手动管理数据库连接、编写 SQL 语句、处理结果集等&#xff0c;开发效率低且容易出错。MyBatis 应运而生&#xff0c;它通过将 SQL 语句与 Java 代码分离&a…...

使用matlab 对传递函数分析bode图和阶跃函数

如果已知一个系统的传递函数&#xff0c;想看一下bode图&#xff0c;可以通过simulink 建模&#xff0c;但是simulink运行起来相对比较慢&#xff0c;我一般都是直接通过matlab 的m语言写脚本实现。可以快速的获得结果 如 我们有一个一阶低通传递函数 syswn/(swn) 在matlab中…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...