sevlet3.0上传文件功能
生活随笔
收集整理的這篇文章主要介紹了
sevlet3.0上传文件功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在sevlet3.0以前,java上傳文件很麻煩,要么用底層的request.getinputstream。獲取流,但是這個流不是干凈的流,報過上傳的文件名都在文件的前部分,包括文件的結(jié)尾也有特殊的字符。需要使用io層層過濾。提取你所需要的文件,鑒于水平有限,我只能提t(yī)xt文本文件的內(nèi)容,然而一道圖片處理總是丟失或者多出一些東西來。知道原理后也不打算深入研究。
另外就是使用外部jar包上傳文件,這種也是基于request.getinputstream。獲取文件,只不過人家?guī)湍惆逊椒ǚ庋b好,你只需使用即可。
但是自從sevlet3.0出來之后這一切就改變了。出現(xiàn)一個part類,這個類把各個部分相對較干凈的分離,尤其是文件輸入流。你得到的流就是干凈的流,直接正常的io讀取就可以。在學(xué)習(xí)part的過程中,你可以一步步試探的學(xué)習(xí),打印看看出來的是什么。然后截取有用的,最后上傳為文件就好了。
附上代碼:
首先:jsp部分upload.jsp
sevlet部分
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Collection;import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part;@MultipartConfig public class doupload extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//防止亂碼,一定要有Part part=request.getPart("file");//名稱upload(part);//下載文件}public String getname(Part part)//獲取名稱{String contentdisposition=part.getHeader("content-disposition");//form-data; name="file"; filename="jsp學(xué)習(xí).txt"String[]filename=contentdisposition.split("=");//分隔String filename1=filename[filename.length-1];//"jsp學(xué)習(xí).txt"String filename2=filename1.replace("\"", "");return filename2;}public void upload(Part part) throws IOException{String path=this.getServletContext().getRealPath("fileget/");//專門創(chuàng)建一個fileget文件夾存取內(nèi)容File file=new File(path);if(!file.exists())//不存在就新建文件夾{file.mkdir();}File file2=new File(file,getname(part));//創(chuàng)建文件if(!file2.exists()){file2.createNewFile();}InputStream in=part.getInputStream();OutputStream out=new FileOutputStream(file2);byte by[]=new byte[1024]; while(in.read(by, 0, 1024)!=-1){out.write(by);by=new byte[1024];}in.close();out.close();} }xml配置:
<web-app><servlet> <servlet-name> doupload2</servlet-name> <servlet-class> com.runoob.test.doupload</servlet-class></servlet><servlet-mapping> <servlet-name> doupload2</servlet-name><url-pattern>/doupload2</url-pattern></servlet-mapping> </web-app>經(jīng)測試可以上傳大部分文件,但是文件上傳沒有優(yōu)化,如果你想優(yōu)化,可以使用buffered緩存優(yōu)化,至于其他優(yōu)化就不太知道了,本人小白。如果有的可以交流!
總結(jié)
以上是生活随笔為你收集整理的sevlet3.0上传文件功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 利用dfs生成简单的随机迷宫(
- 下一篇: java 用sevlet实现ip定位以及