Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点

简介: (补充:再linux服务器上可能没用创建文件的权限,那就需要找到文件夹给权限,比如我的chmod -R 777 /home/tomcat/apache-tomcat-default/webapps/food)

前言



(补充:再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-Disposition
 response.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类,速度差别如果带宽能够满足的话差别还是很大的。

目录
相关文章
|
8月前
|
Java 数据库连接 Maven
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
|
8月前
|
Java 开发者
Servlet 教程 之 Servlet 文件上传 1
Servlet 文件上传教程展示了如何利用 HTML 表单和 Servlet 处理文件上传。关键点包括:POST 方法的 form,enctype 设为 &quot;multipart/form-data&quot;,以及 action 指向如 UploadServlet 的处理程序。所需的 jar 包有 commons-fileupload-1.3.2 和 commons-io-2.5.jar。Servlet 3.0 已内置文件上传支持,无需额外组件。示例的 upload.jsp 文件包含一个单文件上传表单,使用 input[type=&quot;file&quot;] 元素。
86 5
|
5月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
8月前
|
XML 数据格式
Servlet 教程 之 Servlet 文件上传 3
该教程介绍了如何使用Servlet进行文件上传。在web.xml中配置了Servlet `UploadServlet`,类为`com.baidu.test.UploadServlet`,映射路径为`/TomcatTest/UploadServlet`。用户需通过创建的HTML表单提交文件,访问URL为:http://localhost:8080/TomcatTest/upload.jsp。
40 0
|
8月前
|
前端开发 Java Apache
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
109 0
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
|
7月前
|
Java 数据库连接 容器
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(1)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
6月前
|
前端开发 Java 应用服务中间件
Spring Boot 2.x 嵌入式 Servlet 容器
Spring Boot使用内嵌Tomcat,默认端口8080,可通过`application.properties`配置端口、上下文路径等。配置方式有两种:1) 直接在配置文件中添加`server.port`和`server.servlet.context-path`;2) 创建`WebServerFactoryCustomizer` Bean来自定义配置,如设置端口`factory.setPort(8083)`,这种方式优先级更高。
|
7月前
|
XML 前端开发 Java
SpringMVC的架构有什么优势?——异常处理与文件上传(五)
SpringMVC的架构有什么优势?——异常处理与文件上传(五)
|
8月前
|
Java 数据库连接 应用服务中间件
SpringMVC关于SSM的整合配置步骤
SpringMVC关于SSM的整合配置步骤
51 1
|
7月前
|
Java Apache
基于servlet完成文件上传功能
基于servlet完成文件上传功能
48 0