1:用<input type=”file”/> 來聲明一個文件域。File:_____ <瀏覽>.
2:必須要使用post方式的表單。
3:必須設置表單的類型為multipart/form-data.是設置這個表單傳遞的不是key=value值。傳遞的是字節碼.

對于一個普通的表單來說只要它是post類型。默認就是
Content-type:application/x-www-from-urlencoded
表現形式
1:在request的請求頭中出現。
2:在form聲明時設置一個類型enctype="application/x-www-form-urlencoded";
如果要實現文件上傳,必須設置enctype=“multipart/form-data”
表單與請求的對應關系:

例子:如何獲取上傳的文件的內容(獲取txt文件)
package cn.hx.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PRintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 如果一個表單的類型是post且enctype為multipart/form-date
* 則所有數據都是以二進制的方式向服務器上傳遞。
* 所以req.getParameter("xxx")永遠為null。
* 只可以通過req.getInputStream()來獲取數據,獲取正文的數據
*/
public class UpServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String txt = req.getParameter("txt");//返回的是null
System.err.println("txt is :"+txt);
System.err.println("=========================================");
InputStream in = req.getInputStream();
// byte[] b= new byte[1024];
// int len = 0;
// while((len=in.read(b))!=-1){
// String s = new String(b,0,len);
// System.err.print(s);
// }
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String firstLine = br.readLine();//讀取第一行,且第一行是分隔符號
String fileName = br.readLine();
fileName = fileName.substring(fileName.lastIndexOf("http://")+1);// bafasd.txt"
fileName = fileName.substring(0,fileName.length()-1);
br.readLine();
br.readLine();
String data = null;
//獲取當前項目的運行路徑
String projectPath = getServletContext().getRealPath("/up");
PrintWriter out = new PrintWriter(projectPath+"/"+fileName);
while((data=br.readLine())!=null){
if(data.equals(firstLine+"--")){
break;
}
out.println(data);
}
out.close();
}
}
新聞熱點
疑難解答