日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2025/3/20 javascript 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)以及坑点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。