1. 程式人生 > 實用技巧 >ubuntu19.04安裝教程(圖文步驟)

ubuntu19.04安裝教程(圖文步驟)

技術標籤:webjavaweb

什麼是檔案上傳
(1)把本地檔案複製到伺服器上,比如網盤
2、如果實現檔案上傳,頁面必須滿足三個要求
1、什麼是檔案上傳
(1)把本地檔案複製到伺服器上,比如網盤

2、如果實現檔案上傳,頁面必須滿足三個要求
(1)在form表單裡面新增檔案上傳輸入項,檔案上傳輸入項裡面必須有name屬性

在這裡插入圖片描述

(2)實現上傳表單提交方式必須post

(3)設定form提交資料型別
enctype=“multipart/form-data”

在這裡插入圖片描述

3、點選上傳按鈕,把選擇本地檔案上傳到servlet,在servlet中獲取上傳檔案,進行相應操作
(1)如果使用servlet是2.5及其以下版本,這個時候servlet不能直接實現檔案上傳的,需要引入第三方依賴才可以實現(一般都是這樣使用)

(2)如果使用servlet3.0及其以後的版本,servlet提供上傳功能,只是一般不使用
在這裡插入圖片描述

4、編寫servlet程式碼,實現檔案上傳操作



@WebServlet(name = “UploadServlet”,urlPatterns = “/upload”)
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {
//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”);
}