使用commons-fileupload包實現文件上傳

首先,需要在pom文件中添加相關依賴

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

編寫前端頁面
form表單必須添加enctype="multipart/form-data屬性,input設置爲file類型,這裏的name屬性不能省略,可能導致文件上傳失敗。

    <form action="file/fileupload" method="post" enctype="multipart/form-data">
        選擇文件:<input type="file" name="upload"/>
        <br/>
        <input type="submit" value="上傳"/>
    </form>

編寫文件上傳控制器
List<FileItem> items獲取的是所有表單元素,通過isFormField判斷當前元素是普通表單項還是文件上傳項。通過在上傳文件前面添加uuid,可以實現將相同文件上傳多次,並且實際存儲的文件名不同。真實文件名可通過“-”進行簡單拆分獲取。

@Controller
@RequestMapping("/file")
public class FileUploadController {
    @RequestMapping("/fileupload")
    public  String doFileUpload(HttpServletRequest request) throws Exception {
        //文件上傳路徑
        String path = request.getSession().getServletContext().getRealPath("/uploads");
        //打印文件上傳地址
        //System.out.println(path);
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        //解析request對象,獲取上傳文件項
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request
        List<FileItem> items = upload.parseRequest(request);
        for(FileItem item:items){
            //判斷是否爲文件上傳項
            if(!item.isFormField()){
                String fileName = item.getName();
                String uuid = UUID.randomUUID().toString();
                fileName = uuid + "-" + fileName;
                //上傳文件,指定上傳路徑和文件名
                item.write(new File(path,fileName));
                //刪除臨時文件
                item.delete();
            }
        }
        return "uploadSuccess";
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章