java檔案上傳(解析request流)
阿新 • • 發佈:2019-02-01
無聊看nio的socket操作,看到了socket檔案傳輸想到之前做檔案上傳一直是用apache fileupload的元件,也沒有考慮過為什麼直接從request裡取不出檔案,現在想來原來是隻有從request中得到io流才能進行解析,現在自己寫了一個解析檔案上傳的過程,程式碼如下,很好理解,不做解釋。
頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form id = "f" name="f" method="post" enctype="multipart/form-data" action="UploadServerlet"> <table> <tr><td><input type="file" name="file" id="file">請選擇檔案 <tr><td><button type="submit">提交</button> </table> </form> </body> </html>
serverlet
package com.cyj; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class UploadServerlet */ @WebServlet("/UploadServerlet") public class UploadServerlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServerlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream is = request.getInputStream(); StringBuffer sb = new StringBuffer(); int count = 0; while(true){ int a = is.read(); sb.append((char)a); if(a == '\r') count++; if(count==4){ is.read(); break; } } String title = sb.toString(); System.out.println(title); String[] titles = title.split("\r\n"); String fileName = titles[1].split(";")[2].split("=")[1].replace("\"",""); System.out.println(fileName); FileOutputStream os = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\"+fileName)); byte[] ob = new byte[1024]; int length = 0; while((length = is.read(ob, 0, ob.length))>0){ os.write(ob,0,length); os.flush(); } os.close(); is.close(); } }