文件上傳

一. commons-fileupload組件上傳

1. 導(dǎo)入jar包依賴

        <!--文件上傳組件-->
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

2. 編寫文件上傳的前臺(tái)頁(yè)面

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

3. 編寫Controller控制器

    /**
     * 組件上傳(commons-fileupload)
     * @param request
     * @return
     * @throws Exception
     */
    @PostMapping("upload")
    @ResponseBody
    public String uploadFile(HttpServletRequest request) throws Exception {
        System.out.println("文件上傳 start...");

        //上傳位置
        String realPath = request.getSession().getServletContext().getRealPath("/uploads/");

        //判斷路徑是否存在
        File file = new File(realPath);
        if(!file.isDirectory()){
            //創(chuàng)建文件夾
            boolean mkdir = file.mkdir();
            System.out.println("位置:"+mkdir+":"+file.getAbsolutePath());

        }

        //解析request對(duì)象,獲取上傳文件項(xiàng)
        //磁盤文件項(xiàng)工廠
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem i:items) {
            if(i.isFormField()){
                //普通表單項(xiàng),不處理
            }else{
                //文件上傳項(xiàng)
                //獲取上傳文件的名稱
                String fileName = i.getName();

                fileName = System.currentTimeMillis() + fileName;
                System.out.println("文件名:"+fileName);
                //上傳
                i.write(new File(realPath,fileName));
                //刪除臨時(shí)文件
                i.delete();
            }
        }

        return "ok";
    }

二. SpringMVC文件上傳

1. SpringMVC框架提供了MultipartFile對(duì)象,該對(duì)象表示上傳的文件,要求變量名稱必須和表單?le標(biāo)簽的 name屬性名稱相同。
2.Controller如下:

    /**
     * springMVC上傳
     * @param request
     * @param upload
     * @return
     * @throws IOException
     */
    @PostMapping("upload")
    @ResponseBody
    public String springMVCFileUpload(HttpServletRequest request,MultipartFile upload) throws IOException {
        System.out.println("文件上傳 start...");

        //上傳位置
        String realPath = request.getSession().getServletContext().getRealPath("/uploads/");

        //判斷路徑是否存在
        File file = new File(realPath);
        if(!file.isDirectory()){
            //創(chuàng)建文件夾
            boolean mkdir = file.mkdir();
            System.out.println("創(chuàng)建文件夾"+mkdir+":"+file.getAbsolutePath());

        }

        //獲取上傳文件的名稱
        String fileName = upload.getOriginalFilename();

        fileName = System.currentTimeMillis() + fileName;
        System.out.println("文件名:"+fileName);

        upload.transferTo(new File(realPath,fileName));
        return "ok";
    }

3.配置文件解析器對(duì)象

    <!--配置文件上傳解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--文件上傳大小限制-->
        <property name="maxUploadSize" value="10485760"/> <!-- 10M = 10*1024*1024 =  10485760 -->
    </bean>

三. SpringMVC跨服務(wù)器文件上傳

1.準(zhǔn)備圖片服務(wù)器(Server-image),并配置允許讀寫操作(以 http://localhost:9090/uploads/ (圖片服務(wù)器的路徑) 為例:)

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    
    <!-- 添加,解決jersey上傳服務(wù)器403錯(cuò)誤 -->
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

web.xml

2.編寫控制類

    /**
     * 跨域上傳
     * @param upload
     * @return
     * @throws IOException
     */
    @PostMapping("upload")
    @ResponseBody
    public String httpFileUpload(MultipartFile upload) throws IOException {
        System.out.println("文件上傳 start...");

        // 上傳位置
        String realPath = "http://localhost:9090/uploads/";

        String fileName = System.currentTimeMillis() + upload.getOriginalFilename();

        // 創(chuàng)建客戶端對(duì)象
        Client client = Client.create();
        // 連接圖片服務(wù)器
        WebResource resource = client.resource(realPath + fileName);
        // 上傳文件
        resource.put(upload.getBytes());
        return "ok";
    }

3.上傳測(cè)試結(jié)果

Server-image

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容