前言

(补充:再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)以及坑点相关推荐

  1. SpringMVC——文件上传下载,异步请求和SSM整合

    一,SpringMVC文件上传下载 1.1 同步 1.1.1 文件上传 第一步:定义上传表单 <form action="${pageContext.request.contextPa ...

  2. SpringMvc文件上传和下载

    最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...

  3. springmvc请路径参数,springmvc-json-ajax使用,springmvc文件上传,springmvc文件下载,springmvc拦截器(内容较多)

    按照操作,绝对都可以实现,亲测.....(项目所有文件和目录结构全都放上去了) idea工具,创建maven项目 第一步: 放置各种配置文件: pom.xml <?xml version=&qu ...

  4. SpringMVC文件上传功能MultipartFile参数为空

    最近简单实现了一个springmvc文件上传功能,点了上传按钮一直报空指针,问题解决了mark一下留作以后查阅,如有搜到这篇文章的仅供参考,先上主要代码.springmvc.xml配置如下: < ...

  5. 轻松搞定阿里OSS文件上传和图片下载

    轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备   1.1 注册阿里云账号,并开通OSS存储服务   1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...

  6. 关于NodeJs使用multer实现文件上传以及实现下载

    关于NodeJs使用express+multer实现文件上传以及实现下载 对于multer的了解可以在 https://www.npmjs.com/ 搜索 multer 了解具体用法. Multer ...

  7. SpringMVC文件上传下载和拦截器

    一.文件上传:文件上传是项目开发中最常用的功能.为了能上传文件,必须将表单的method设置为post,将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...

  8. SpringBoot(SpringMVC)文件上传下载

    话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境.此文,利用的正是SpringMVC的功能. 创建springboot项目:ht ...

  9. 【Spring】SpringMVC文件上传与下载

    对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的 ...

最新文章

  1. ARINC818(FC-AV)协议详解
  2. Linux基础入门(一)
  3. 征集“战疫”中的影像力量 第六届中国无人机影像大赛开始报名
  4. excel 单元格名称 java_Java 创建、编辑、删除Excel命名区域
  5. Zigbee 学习计划——第2天——熟悉CC2530的基本例程
  6. 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
  7. C#基础知识五之abstract virtual关键字
  8. 视觉SLAM应用(一)------AR发展的理解
  9. 光纤接头(尾纤)ST,SC,LC,FC 模块
  10. 基于OpenCV的银行卡号识别系统实现(三)-----输入图像的处理+代码实现
  11. 微型四旋翼飞行器的设计与制作
  12. 智能跟随小车-红外遥控(程序+原理图+PCB+论文报告)
  13. 荒野行动计算机高考题,叮咚,这里有一份荒野行动强迫症测试试卷请查收~
  14. 解决MATLAB2018b打开m文件后注释乱码的问题
  15. 《Python深度学习从零开始学》简介
  16. Java比较汉字字符串排序与C++比较汉字排序
  17. FastVNC(远程协助工具) v1.0
  18. 数据库课程设计——某煤气公司送气管理系统(附课设报告)
  19. Windows内核安全与驱动开发
  20. 基于神经网络的数字识别,神经网络语音识别原理

热门文章

  1. 区块链BaaS云服务(38)点存DCpool分布式存储
  2. 比特币钱包(5) BIP44 账户表示形式
  3. 攻防世界Reverse第八题logmein
  4. 队列化栈栈化队列(力扣)
  5. 203. 移除链表元素(C语言)
  6. javascript中的运算符号
  7. Aarch64汇编语言
  8. swoole mysql 协程_关于协程的优点以及swoole 协程的用法
  9. SQLite 数据库注入总结
  10. 3、MySQL查看存储过程