public class Uploadfile1 extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//獲得磁盤文件條目工廠。
DiskFileItemFactory factory = new DiskFileItemFactory();
//獲取文件上傳需要保存的路徑,upload文件夾需存在。
String path = request.getSession().getServletContext().getRealPath("/upload");
//設置暫時存放文件的存儲室,這個存儲室可以和最終存儲文件的文件夾不同。因爲當文件很大的話會佔用過多內存所以設置存儲室。
factory.setRepository(new File(path));
//設置緩存的大小,當上傳文件的容量超過緩存時,就放到暫時存儲室。
factory.setSizeThreshold(1024*1024);
//上傳處理工具類(高水平API上傳處理?)
ServletFileUpload upload = new ServletFileUpload(factory);
try{
//調用 parseRequest(request)方法 獲得上傳文件 FileItem 的集合list 可實現多文件上傳。
List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
for(FileItem item:list){
//獲取表單屬性名字。
String name = item.getFieldName();
//如果獲取的表單信息是普通的文本信息。即通過頁面表單形式傳遞來的字符串。
if(item.isFormField()){
//獲取用戶具體輸入的字符串,
String value = item.getString();
request.setAttribute(name, value);
}
//如果傳入的是非簡單字符串,而是圖片,音頻,視頻等二進制文件。
else{
//獲取路徑名
String value = item.getName();
//取到最後一個反斜槓。
int start = value.lastIndexOf("\\");
//截取上傳文件的 字符串名字。+1是去掉反斜槓。
String filename = value.substring(start+1);
request.setAttribute(name, filename);
/*第三方提供的方法直接寫到文件中。
* item.write(new File(path,filename));*/
//收到寫到接收的文件中。
OutputStream out = new FileOutputStream(new File(path,filename));
InputStream in = item.getInputStream();
int length = 0;
byte[] buf = new byte[1024];
System.out.println("獲取文件總量的容量:"+ item.getSize());
while((length = in.read(buf))!=-1){
out.write(buf,0,length);
}
in.close();
out.close();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
servlet接收客戶端傳過來的圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.