Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点
前言
(补充:再linux服务器上可能没用创建文件的权限,那就需要找到文件夹给权限,比如我的chmod -R 777 /home/tomcat/apache-tomcat-default/webapps/food)
- 以前在servlet上写过文件上传和文件下载,最近由于需求需要集合到ssm中,有些坑点以前都忘记了。
- 文件上传:文件上传首先要在xml中配置上传信息,ssm有强大的过滤功能,你不声明让某种类型进来他是进不来的,我是用的是servlet3.0的part上传文件,省掉依赖包。
在web.xml中的springmvc配置中添加下面如下配置(配置方法可能很多,但是功能相同):
配置
<servlet>
<servlet-name> springMvc</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name>
<param-value> classpath*:food-servlet.xml</param-value></init-param>
<load-on-startup> 1</load-on-startup><multipart-config>
<max-file-size> 20971520</max-file-size>
<max-request-size> 20971520</max-request-size>
<file-size-threshold> 0</file-size-threshold> </multipart-config></servlet>
代码
下面是我的下载的模板:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.food.dao.foodMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Part;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import com.food.bean.path;
@Controller
public class uploadController {@Autowired(required = true)private foodMapper foodmapper;@RequestMapping(value="/onfile")public String uploadfile(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{HttpSession session=request.getSession();request.setCharacterEncoding("UTF-8");//response.setCharacterEncoding("UTF-8");Part part=request.getPart("file");upload(part,session);return "sucess";}public String getname(Part part)//获取文件名{String contentdisposition=part.getHeader("content-disposition");//form-data; name="file"; filename="jspѧϰ.txt"String[]filename=contentdisposition.split("=");//String filename1=filename[filename.length-1];//"jspѧϰ.txt"String filename2=filename1.replace("\"", "");return filename2;}public void upload(Part part, HttpSession session) throws IOException{String path=session.getServletContext().getRealPath("food/");//System.out.println(path);String filename=getname(part);File file=new File(path);if(!file.exists())//{file.mkdirs();}File file2=new File(file,filename);//if(!file2.exists()){file2.createNewFile();}InputStream in=part.getInputStream();OutputStream out=new FileOutputStream(file2);BufferedInputStream buf=new BufferedInputStream(in);BufferedOutputStream bufout=new BufferedOutputStream(out);byte by[]=new byte[1024*10];int q=0;while((q=buf.read(by))!=-1){bufout.write(by);//by=new byte[1024]}bufout.close();buf.close();in.close();out.close();}}
这个是我的一个小项目剪出来的下载模板,如果有问题修改修改就可以使用,或者可以私信我。
文件下载:文件上传使用的是传统的模板,有用sringmvc的方法的可以
文件下载的一个大坑:当时下载中文名成发现中文名变成"–"无法显示中文,怎么改编码都没有用,后来看了百度说是tomcat的默认编码is编码问题,解决方法和get请求有时的乱码解决很类似,字符串重新编码。核心是:new String(filename.getBytes(“utf-8”),“ISO8859_1”));
@RequestMapping(value = "/download")public String download(String filename,String path,HttpServletRequest request, HttpServletResponse response) throws IOException {System.out.println(filename);response.setCharacterEncoding("utf-8");request.setCharacterEncoding("UTF-8");HttpSession session=request.getSession();response.setContentType("text/html");System.out.println(filename);//设置文件MIME类型response.setContentType(session.getServletContext().getMimeType(filename));//设置Content-Dispositionresponse.setHeader("Content-Disposition", "attachment;filename=" new String(filename.getBytes("utf-8"),"ISO8859_1"));String fullFileName = session.getServletContext().getRealPath( path); //获取绝对路径System.out.println(fullFileName);InputStream in = new FileInputStream(fullFileName);BufferedInputStream buf=new BufferedInputStream(in);OutputStream out = response.getOutputStream();BufferedOutputStream ou=new BufferedOutputStream(out);//PrintWriter out = response.getWriter();int b=0;byte[]bite=new byte[1024];while((b=buf.read(bite))!=-1){ou.write(bite);}ou.close();buf.close();in.close();out.close();return null;}
文件上传和下载一定要用buffer类,速度差别如果带宽能够满足的话差别还是很大的。
如果对后端、爬虫、数据结构算法
等感性趣欢迎关注我的个人公众号交流:bigsai
Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点相关推荐
- SpringMVC——文件上传下载,异步请求和SSM整合
一,SpringMVC文件上传下载 1.1 同步 1.1.1 文件上传 第一步:定义上传表单 <form action="${pageContext.request.contextPa ...
- SpringMvc文件上传和下载
最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...
- springmvc请路径参数,springmvc-json-ajax使用,springmvc文件上传,springmvc文件下载,springmvc拦截器(内容较多)
按照操作,绝对都可以实现,亲测.....(项目所有文件和目录结构全都放上去了) idea工具,创建maven项目 第一步: 放置各种配置文件: pom.xml <?xml version=&qu ...
- SpringMVC文件上传功能MultipartFile参数为空
最近简单实现了一个springmvc文件上传功能,点了上传按钮一直报空指针,问题解决了mark一下留作以后查阅,如有搜到这篇文章的仅供参考,先上主要代码.springmvc.xml配置如下: < ...
- 轻松搞定阿里OSS文件上传和图片下载
轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备 1.1 注册阿里云账号,并开通OSS存储服务 1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...
- 关于NodeJs使用multer实现文件上传以及实现下载
关于NodeJs使用express+multer实现文件上传以及实现下载 对于multer的了解可以在 https://www.npmjs.com/ 搜索 multer 了解具体用法. Multer ...
- SpringMVC文件上传下载和拦截器
一.文件上传:文件上传是项目开发中最常用的功能.为了能上传文件,必须将表单的method设置为post,将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...
- SpringBoot(SpringMVC)文件上传下载
话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境.此文,利用的正是SpringMVC的功能. 创建springboot项目:ht ...
- 【Spring】SpringMVC文件上传与下载
对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的 ...
最新文章
- ARINC818(FC-AV)协议详解
- Linux基础入门(一)
- 征集“战疫”中的影像力量 第六届中国无人机影像大赛开始报名
- excel 单元格名称 java_Java 创建、编辑、删除Excel命名区域
- Zigbee 学习计划——第2天——熟悉CC2530的基本例程
- 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
- C#基础知识五之abstract virtual关键字
- 视觉SLAM应用(一)------AR发展的理解
- 光纤接头(尾纤)ST,SC,LC,FC 模块
- 基于OpenCV的银行卡号识别系统实现(三)-----输入图像的处理+代码实现
- 微型四旋翼飞行器的设计与制作
- 智能跟随小车-红外遥控(程序+原理图+PCB+论文报告)
- 荒野行动计算机高考题,叮咚,这里有一份荒野行动强迫症测试试卷请查收~
- 解决MATLAB2018b打开m文件后注释乱码的问题
- 《Python深度学习从零开始学》简介
- Java比较汉字字符串排序与C++比较汉字排序
- FastVNC(远程协助工具) v1.0
- 数据库课程设计——某煤气公司送气管理系统(附课设报告)
- Windows内核安全与驱动开发
- 基于神经网络的数字识别,神经网络语音识别原理