“文件的上传与下载:实现与优化“
目录
- 引言
- 1.文件的上传
- 2.文件的下载
- 3. JRebel安装使用
- 4. 文件批量上传
- 总结
引言
在开发过程中,文件的上传与下载是常见的需求。本篇博客将以CSND为例,介绍文件上传与下载的常见方式,以及如何通过优化提升性能和用户体验。
1.文件的上传
- 使用表单提交方式
<%--Created by IntelliJ IDEA.User: yuanhDate: 2023/9/9Time: 16:38To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="/student/upload" method="post" enctype="multipart/form-data"><label>编号:</label><input type="text" name="sid" readonly="readonly" value="${param.sid}"/><br/><label>图片:</label><input type="file" name="photo"/><br/><input type="submit" value="上传图片"/>
</form>
</body>
</html>
- 文件上传
@RequestMapping("/upload")public String upload(Student student,MultipartFile photo){try {// D:\Course\temp\imagesString dir = PropertiesUtil.getValue("dir");String server = PropertiesUtil.getValue("server");String originalFilename = photo.getOriginalFilename();FileUtils.copyInputStreamToFile(photo.getInputStream(),new File(dir+originalFilename));student.setSname(server+originalFilename);studentBiz.updateByPrimaryKeySelective(student);} catch (IOException e) {e.printStackTrace();}return "redirect:list";}
- resource.properties 配置
dir= D:/Course/temp/images/
server=/images/
2.文件的下载
- 常规下载方式
提供直接下载链接,用户点击链接即可下载文件。
设置合适的下载文件名和MIME类型。
控制权限,只允许有权限的用户下载。 - 异步下载
@RequestMapping(value="/download")public ResponseEntity<byte[]> download(Student student, HttpServletRequest req){try {//先根据文件id查询对应图片信息Student stu = this.studentBiz.selectByPrimaryKey(student.getSid());String diskPath = PropertiesUtil.getValue("dir");String reqPath = PropertiesUtil.getValue("server");String realPath = stu.getSname().replace(reqPath,diskPath);String fileName = realPath.substring(realPath.lastIndexOf("/")+1);//下载关键代码File file=new File(realPath);HttpHeaders headers = new HttpHeaders();//http头信息String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码headers.setContentDispositionFormData("attachment", downloadFileName);headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);}catch (Exception e){e.printStackTrace();}return null;}
3. JRebel安装使用
JRebel是一个Java开发工具,可以实时更新Java代码而无需重新启动应用程序。
-
1.安装JRebel插件

-
2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)

-
3.启动JRebel,测试使用
-
4.设置jrebel离线

4. 文件批量上传
批量下载图片可以通过以下方式实现:
@RequestMapping("/uploads")public String uploads(HttpServletRequest req, Student student, MultipartFile[] files){try {StringBuffer sb = new StringBuffer();for (MultipartFile cfile : files) {//思路://1) 将上传图片保存到服务器中的指定位置String dir = PropertiesUtil.getValue("dir");String server = PropertiesUtil.getValue("server");String filename = cfile.getOriginalFilename();FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename));sb.append(filename).append(",");}System.out.println(sb.toString());} catch (Exception e) {e.printStackTrace();}return "redirect:list";}
总结
本篇博客介绍了文件的上传与下载的常见方式,并通过优化手段提升性能和用户体验。同时,还介绍了JRebel工具的简介以及如何批量下载图片。通过学习和应用这些方法,可以更好地满足开发需求并提升开发效率。
相关文章:
“文件的上传与下载:实现与优化“
目录 引言1.文件的上传2.文件的下载3. JRebel安装使用4. 文件批量上传总结 引言 在开发过程中,文件的上传与下载是常见的需求。本篇博客将以CSND为例,介绍文件上传与下载的常见方式,以及如何通过优化提升性能和用户体验。 1.文件的上传 使…...
uboot顶层Makefile前期所做工作说明三
一. uboot顶层 Makefile文件 uboot顶层 Makefile,就是 uboot源码工程的根目录下的 Makefile文件。 本文继续对 uboot顶层 Makefile的前期准备工作进行介绍。续上一篇文章内容的学习,如下: uboot顶层Makefile前期所做工作说明二_凌肖战的博…...
Mysql树形表的两种查询方案(递归与自连接)
你有没有遇到过这样一种情况: 一张表就实现了一对多的关系,并且表中每一行数据都存在“爷爷-父亲-儿子-…”的联系,这也就是所谓的树形结构 对于这样的表很显然想要通过查询来实现价值绝对是不能只靠select * from table 来实现的࿰…...
text-align和text-align-last的属性值
text-algin 文本对齐方式: (1)left:左对齐; (2)right:右对齐; (3)center:居中对齐; (4)start&…...
SpringMVC的注解、参数传递、页面跳转
一.SpringMvc常用注解 常用注解 RequestMapping:RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。 RequestParam:RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上 ModelAttr…...
OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND
OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND 环境报错原因与解决未设置 udev 规则USB崩溃排线接触不良或相机模块时钟干扰 环境 硬件: 4✖️OV9782相机模组OAK-FFC-4P驱动模组笔记本电脑 软件: Ubuntu18.04python 3.9depthai 2.21.2.0 报错…...
Python异常处理——走BUG的路,让BUG无处可走
作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、了解python异常 1、BUG 单词的由来 2、什么是异…...
如何解决iOS打包工具AppUploader登录权限问题?
摘要:在iOS技术博主的指导下,了解如何解决使用AppUploader打包时出现的权限问题。本文将深入探讨此问题,为你提供详细的解决方案。 引言: 作为iOS开发者,我们经常需要使用工具来打包和上传应用程序。AppUploader 是一…...
leetcode分类刷题:基于数组的双指针(四、小的移动)
leetcode上有些题是真的太难了,正常读题之后完全想不到要用双指针来求解,本次博客总结的题目是双指针初始时位于数组两端,哪个元素小就移动哪个指针 11. 盛最多水的容器 1、这道题放在42. 接雨水的相似题目里,可能是因为它们都有相…...
eclipse
快捷键 F4: 继承树 F3: 查看变量、方法、类的定义, 跳到光标所在标识符的定义代码。(Ctrl左键) CtrlShiftG: 在工作空间中查找引用了光标所在标识符的位置。与F3相反的快捷键。当按类定义进行阅读时,当前类方法或者函数在被哪些地方调用 controlTAB: 切…...
VIT中的einops包详解
‘’‘einops有三个常用方法:rearrange,repeat,reduce’‘’ rearrange的操作相当于转置 rearrange(image,‘h w c -> w h c’) 高和宽转置 path ../data/cat_and_mouse.jpg image cv2.imread(path) h,w,c image.shape # shape第一个值是h,第二个是w image…...
目标检测笔记(十三): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程))
文章目录 一、目标检测介绍二、YOLOv5介绍2.1 和以往版本的区别 三、代码获取3.1 视频代码介绍 四、环境搭建五、数据集准备5.1 数据集转换5.2 数据集验证 六、模型训练七、模型验证八、模型测试九、评价指标 一、目标检测介绍 目标检测(Object Detectionÿ…...
【数据结构】设计环形队列
环形队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列…...
无涯教程-JavaScript - COUPDAYSNC函数
描述 COUPDAYSNC函数返回从结算日期到下一个息票日期的天数。 语法 COUPDAYSNC (settlement, maturity, frequency, [basis])争论 Argument描述Required/OptionalSettlement 证券的结算日期。 证券结算日期是指在发行日期之后将证券交易给买方的日期。 RequiredMaturity 证…...
python 随机生成emoji表情
问答板块觉得比较有意思的问题 当时搜了些网上的发现基本都不能用,不知道是版本的问题还是咋的就开始自己研究 python随机生成emoji 问题的产生解决官网文档数据类型实现思路实现前提:具体实现: 其他常见用法插入 Emoji 表情:解析…...
python关闭指定进程以excel为例
先说下环境: Excel版本: Python2.7.13和Python3.10.4并存。 2、打开两个excel工作簿 看进程是这样的: 3、用python编程kill进程 # -*- coding: utf-8 -*- import os proc_nameEXCEL.EXE if __name__ __main__:os.system(taskkill /im {} /…...
前后端中的异步和事件机制 | 前后端开发
前言 在前后端程序设计开发工作中,小伙伴们一定都接触过事件、异步这些概念。出现这些概念的原因之一是,我们的代码在执行过程中所涉及的逻辑在不同的场合下执行时间的期望是各不相同的。为了尽量做到充分利用CPU等资源做尽可能多的事,免不了…...
设计模式篇(Java):装饰者模式
👨💻本文专栏:设计模式篇-装饰者模式 👨💻本文简述:装饰者模式的详解以及jdk中的应用 👨💻上一篇文章: 设计模式篇(Java):桥接模式 👨&am…...
Spark【RDD编程(三)键值对RDD】
简介 键值对 RDD 就是每个RDD的元素都是 (key,value)类型的键值对,是一种常见的 RDD,可以应用于很多场景。 因为毕竟通过我们之前Hadoop的学习中,我们就可以看到对数据的处理,基本都是以…...
从板凳围观到玩转行家:Moonbeam投票委托如何让普通用户一同参与
今年5月,Moonbeam发起了一项社区链上治理中投票委托反馈的调查。187位社区成员参与了这项调查,调查发现受访者对治理感兴趣,增加参与度只需要进行一些调整,即更简化的投票流程。 治理和去中心化是Web3的核心,随着Moon…...
基于SpringBoot的门禁与访客管理系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot框架的门禁与访客管理系统以解决传统门禁系统在智能化管理方面存在的局限性。当前多数门禁系统仍采用封闭式架构设计导致数据…...
RISC-V SoC上DNN加速的内存优化与FTL算法实践
1. RISC-V SoC上的DNN加速内存优化挑战在边缘计算场景下,深度神经网络(DNN)的部署面临严峻的内存带宽挑战。典型的RISC-V异构SoC(如Siracusa)采用多级软件管理内存架构,包含L1紧耦合存储器(32KB)、L2共享缓…...
OpenCV 4.x/5.x 在Ubuntu 22.04上安装后,CMake项目死活找不到库?一个环境变量就搞定
OpenCV 4.x/5.x 在Ubuntu 22.04上安装后CMake项目找不到库的终极解决方案 当你满怀期待地在Ubuntu 22.04上安装了最新版的OpenCV,准备开始你的计算机视觉项目时,却遭遇了CMake无法找到OpenCV库的尴尬局面。这种"明明安装了却找不到"的情况&…...
RPG Maker插件如何让你零代码创建专业级游戏地图?
RPG Maker插件如何让你零代码创建专业级游戏地图? 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否曾为RPG Maker游戏地图缺乏深度和立体感而烦恼?是否…...
在DOSBox中运行Appler模拟器:重温Apple II的复古计算体验
1. 项目概述:在DOS的土壤里复活Apple II的灵魂如果你和我一样,对计算机历史的交汇点着迷,那么“在8086的机器上模拟一颗6502的心脏”这个想法本身就充满了极客浪漫主义色彩。Appler正是这样一个跨越时代的产物——一个专为MS-DOS编写的Apple …...
千问 LeetCode 2402.会议室 III public int mostBooked(int n, int[][] meetings)
这道题是经典的会议室 III,核心是双堆模拟,一个堆管空闲会议室(按编号排序),一个堆管正在使用的会议室(按结束时间排序)。解题思路1. 排序:按会议开始时间升序排列。 2. 双堆初始化&…...
从Simulink的Vector信号到C代码数组:手把手拆解初始化(initialize)与步进(step)函数的生成逻辑
从Simulink的Vector信号到C代码数组:手把手拆解初始化与步进函数的生成逻辑 在嵌入式系统开发中,Simulink模型到C代码的转换过程往往被视为一个"黑箱"——工程师们习惯性地点击生成按钮,然后接受输出的代码文件。然而,当…...
AI驱动的代码冻结守护者:开源项目xcf如何提升软件发布质量
1. 项目概述:当AI遇上代码冻结,一个开源协作范式的诞生最近在开源社区里,一个名为CodeFreezeAI/xcf的项目引起了我的注意。乍一看这个标题,可能会让人有些困惑:“CodeFreeze” 通常指的是软件开发流程中的“代码冻结”…...
利用Taotoken多模型能力为AIGC应用构建智能降级链路
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken多模型能力为AIGC应用构建智能降级链路 在构建面向真实用户的AIGC应用时,服务的稳定性直接影响用户体验。…...
STM32F407 CCMRAM实战:释放LVGL图形库的RAM压力
1. 为什么需要CCMRAM优化LVGL性能 第一次用STM32F407做带屏项目时,我被RAM不足的问题折腾得够呛。当时用LVGL显示320x240的界面,刚加上第二个页面就频繁出现HardFault。用CubeMX生成的默认内存配置,128KB的RAM被各种变量瓜分后,留…...
