亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaWeb怎么實現簡單上傳文件功能

發布時間:2022-06-23 09:53:40 來源:億速云 閱讀:213 作者:iii 欄目:開發技術

這篇文章主要介紹了JavaWeb怎么實現簡單上傳文件功能的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JavaWeb怎么實現簡單上傳文件功能文章都會有所收獲,下面我們一起來看看吧。

基本思想:網站服務器的內部除了有Web應用,還有文件系統,客戶端向網站上傳文件就是將文件以流的形式傳輸給了服務器,如圖所示:

JavaWeb怎么實現簡單上傳文件功能

注意事項:

1、為保證服務器的安全,上傳的文件路徑應放在外界不能直接訪問的目錄下,比如WEB-INF目錄下。
2、因為服務器的文件系統大小有限,上傳的文件大小必須要有限制。
3、為防止因為文件名重復而導致文件覆蓋,應當給上傳的文件夾生成唯一的標識,比如時間戳、UUID或者md5加密。
4、可以限制上傳文件的類型,在收到文件的時候,判斷文件后綴是否合法。

在JavaWeb中,一般我們使用ServletFileUpload類來處理上傳的文件數據,它使用parseRequest方法將表單的每一個輸入項封裝成一個FileItem對象,并以list的形式返回,處理數據比較簡短,方便。

下面是一個上傳文件的小demo,編輯器是IDEA,項目類型是Maven Webapp。

package com.xiaojing.servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.UUID;

public class FileUploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //判斷表單是普通表單,還是上傳文件表單
        if(!ServletFileUpload.isMultipartContent(req)){
            return;
        }
        //創建上傳文件的路徑,一般放在/WEB-INF下,比較安全
        String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");
        File uploadFile = new File(uploadPath);
        if(!uploadFile.exists()){
            uploadFile.mkdir();
        }
        //如果上傳的文件大小超過了限制,那么會將這個文件放在臨時文件夾,過段時間提醒用戶刪除或者轉為永久
        String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
        File tempFile = new File(tempPath);
        if(!tempFile.exists()){
            tempFile.mkdir();
        }

        //1、創建DiskFileItemFactory對象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2、獲取ServletFileUpload對象
        ServletFileUpload upload = new ServletFileUpload();
        upload.setFileItemFactory(factory);
        //3、處理上傳文件
            //將前端請求封裝成Fileitem對象,每一個表單輸入項都是一個Fileitem對象
        try {
            List<FileItem> items = upload.parseRequest(req);
            for (FileItem item: items) {
                if(item.isFormField()){ //如果是普通的表單
                    //getFieldName()是input的name屬性,getString()是input的value屬性
                    String fieldName = item.getFieldName();
                    String value = item.getString("UTF-8");
                    System.out.println(fieldName + ":" +value);
                }else{  //上傳文件的表單
                    //---------------處理文件------------------//
                    String uploadFileName = item.getName();
                    System.out.println("上傳的文件名:"+uploadFileName);
                    if(uploadFileName == null || uploadFileName.trim().equals("")){
                        continue;
                    }
                    //獲取fileName文件名,uploadFileName一般是url/文件路徑/文件
                    String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\")+1);
                    //獲取文件后綴
                    String fileExt = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);
                    System.out.println("文件信息:"+fileName);

                    //---------------處理地址-----------------//
                    //使用UUID唯一標識存放文件夾
                    String uuidPath = UUID.randomUUID().toString();
                    //獲取真實的文件夾地址
                    String realPath = uploadPath + "/" + uuidPath;
                    File realFile = new File(realPath);
                    if(!realFile.exists()){
                        realFile.mkdir();
                    }

                    //---------------處理文件流-----------------//
                    //獲取文件上傳的流
                    InputStream inputStream = item.getInputStream();
                    //創建一個文件輸出流
                    FileOutputStream outputStream = new FileOutputStream(realFile + "/" + fileName);
                    //創建一個緩沖區
                    byte[] buffer = new byte[1024 * 1024];
                    int len = 0;
                    while((len = inputStream.read(buffer)) > 0){ //每次讀寫1M
                        outputStream.write(buffer,0,len);
                    }
                    outputStream.close();
                    inputStream.close();

                    String msg = "文件上傳成功";
                    System.out.println("文件上傳成功");
                    //清除臨時文件
                    item.delete();
                    //轉發
                    req.setAttribute("msg",msg);
                    req.getRequestDispatcher("index.jsp").forward(req,resp);

                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

關于“JavaWeb怎么實現簡單上傳文件功能”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JavaWeb怎么實現簡單上傳文件功能”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东省| 海晏县| 郸城县| 井陉县| 台前县| 阿拉善盟| 卢氏县| 连云港市| 铜鼓县| 交城县| 渭南市| 绵阳市| 江都市| 大理市| 凤台县| 靖远县| 河西区| 长兴县| 泸西县| 鄯善县| 通化县| 仁化县| 大足县| 交口县| 柏乡县| 莆田市| 龙岩市| 奉新县| 镇赉县| 休宁县| 方山县| 闸北区| 同德县| 额尔古纳市| 正蓝旗| 通河县| 盈江县| 德保县| 德惠市| 曲水县| 如皋市|