ubuntu19.04安裝教程(圖文步驟)
什麼是檔案上傳
(1)把本地檔案複製到伺服器上,比如網盤
2、如果實現檔案上傳,頁面必須滿足三個要求
1、什麼是檔案上傳
(1)把本地檔案複製到伺服器上,比如網盤
2、如果實現檔案上傳,頁面必須滿足三個要求
(1)在form表單裡面新增檔案上傳輸入項,檔案上傳輸入項裡面必須有name屬性
(2)實現上傳表單提交方式必須post
(3)設定form提交資料型別
enctype=“multipart/form-data”
3、點選上傳按鈕,把選擇本地檔案上傳到servlet,在servlet中獲取上傳檔案,進行相應操作
(1)如果使用servlet是2.5及其以下版本,這個時候servlet不能直接實現檔案上傳的,需要引入第三方依賴才可以實現(一般都是這樣使用)
4、編寫servlet程式碼,實現檔案上傳操作
@WebServlet(name = “UploadServlet”,urlPatterns = “/upload”)
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1 建立磁碟檔案項工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
//2 根據磁碟檔案項工廠建立核心上傳物件 ServletFileUpload ServletFileUpload fileUpload = new ServletFileUpload(factory); //3 通過核心上傳物件解析request物件,得到多個fileItem的集合 List<FileItem> fileItemList = fileUpload.parseRequest(request); //4 把fileItem的集合進行遍歷 for (FileItem fileItem:fileItemList) { //5 判斷fileItem是普通輸入項 還是檔案上傳輸入項 //如果普通輸入項獲取值,如果檔案上傳輸入項進行上傳操作 if(fileItem.isFormField()) {//普通輸入項 type=“text” //獲取普通輸入項值 //如果表單 enctype="multipart/form-data"之後,使用request裡面方法不能獲取表單提交資料 String name = fileItem.getFieldName(); //表單input裡面name屬性值 String value = fileItem.getString("utf-8"); //輸入值 value值,設定中文亂碼 System.out.println(name+"==="+value); } else { //檔案上傳輸入項 type=file //上傳操作 //1 獲取上傳檔名稱 String fileName = fileItem.getName(); //在檔名稱新增uuid String uuid = UUID.randomUUID().toString().replaceAll("-",""); // 1.jpg fileName = uuid+fileName; System.out.println("fileName: "+fileName); //2 把本地檔案上傳伺服器某個目錄 //獲取fileupload目錄在tomcat目錄位置 String realPath = getServletContext().getRealPath("/fileupload"); System.out.println("*****"+realPath); //檢查fileupload資料夾是否存在,如果不存在則建立 File file = new File(realPath); if(!file.exists()) { file.mkdirs(); } //tomcat本地目錄中 fileItem.write(new File(realPath+"/"+fileName)); //刪除臨時檔案 fileItem.delete(); } } } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); }
}
檔案下載
@WebServlet(name = “DownServlet”,urlPatterns = “/down”)
public class DownServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1 得到伺服器下載檔案輸入流
String realPath = getServletContext().getRealPath("/fileupload/shop.sql");
File file = new File(realPath);
InputStream in = new FileInputStream(file);
//2 設定資訊,因為使用瀏覽器下載
//設定頭資訊,讓瀏覽器以下載方式開啟
response.setHeader("Content-Disposition","attachment;filename=shop.sql");
//設定下載檔案大小
long size = file.length();
response.setContentLength((int)size);
//3 通過輸出流輸出到瀏覽器
ServletOutputStream out = response.getOutputStream();
//4 流對接,把輸入流複製到輸出流
byte[] b = new byte[1024];
int len = 0;
while((len=in.read(b))> 0){
out.write(b, 0, len);
}
in.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
檔案下載亂碼
1、亂碼:下載檔名稱包含中文,下載時候中文不能正常顯示,但是檔案內容可以下載
2、瀏覽器一般約定兩大類
(1)火狐
- 火狐瀏覽器內部使用編碼方式Base64
(2)非火狐
- 比如ie等瀏覽器,使用把編碼方式URL編碼
//獲取當前請求瀏覽器
String ua = request.getHeader(“User-Agent”);
//判斷客戶端是否為火狐
if(ua.contains(“Firefox”)){
//若為火狐使用BASE64編碼
fileName = “=?utf-8?B?”+new BASE64Encoder()
.encode(fileName.getBytes(“utf-8”))+"?=";
}else{
//否則使用UTF-8
fileName = URLEncoder.encode(fileName,“utf-8”);
}