SpringMVC_はファイルアップロードhehe.employment.over.38.2を実現します。

38.3SpringMVCはファイルアップロードを実装します

38.3.1ファイルアップロードに必要な前提条件

  • フォームのenctype値は次のとおりである必要があります。multipart/form-data
    • (デフォルト:application/x-www-form-urlencoded
    • enctype:フォームリクエスト本文のタイプです
  • メソッド属性の値は次のようにする必要があります Post
  • ファイル選択フィールドを提供する<input type=”file” />

38.3.2ファイルアップロードの主成分分析

  • フォームのenctype値がデフォルト値でない場合、request.getParameter()は無効になります。
  • enctype =” application / x-www-form-urlencoded”の場合、フォームの本文の内容は次のとおりです。 key=value&key=value&key=value
  • フォームフォームのenctype値がMutilpart / form-dataの場合、リクエスト本文の内容は次のようになります。
    • 各部分は、MIMEタイプの説明の本文です。
    • ------------------------------ 7de1a433602ac区切り文字
    • Content-Disposition:form-data; name = "userName"プロトコルヘッダー
    • aaa协议的正文
      ----------------------------- 7de1a433602ac Content-Disposition:form-data; name =“ file”;
      filename =“ C:\ Users \ zhy \ Desktop \ fileupload_demofile \ b.txt”
    • Content-Type:テキスト/プレーンプロトコルのタイプ(MIMEタイプ)
    • bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    • ----------------------------- 7de1a433602ac-

38.3.3サードパーティコンポーネントを使用してファイルをアップロードする

  • Commons-fileuploadコンポーネントを使用してファイルをアップロードするには、コンポーネントの対応するサポートjarパッケージをインポートする必要があります。 Commons-fileupload和commons-ioCommons-ioはファイルアップロードコンポーネントの開発jarファイルに属していませんが、Commons-fileuploadコンポーネントはバージョン1.1から始まります。動作するにはcommons-ioパッケージのサポートが必要です。

38.3.4従来のファイルアップロード

  • ファイルをアップロードする従来の方法は、アップロードするファイルとアクセスするアプリケーションが同じサーバー上に存在することを意味します。また、アップロードが完了すると、ブラウザがジャンプする場合があります。
  • 1.ファイルによってアップロードされたjarパッケージをインポートします
    • pom.xml
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
  • 2.ファイルアップロード用のJSPページを作成します
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>传统文件上传</h3>
    <form action="user/fileupload1" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>
</body>
</html>

  • ファイルアップロード用のコントローラーコントローラーを作成する
package com.xww.controller;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
import java.util.UUID;

@Controller
@RequestMapping("/user")
public class UserController {
    
    

    /**
     * 文件上传
     * @return
     */
    @RequestMapping("/fileupload1")
    public String fileuoload1(HttpServletRequest request) throws Exception {
    
    
        System.out.println("文件上传...");

        // 使用fileupload组件完成文件上传
        // 上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        // 判断,该路径是否存在
        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){
    
    
            // 进行判断,当前item对象是否是上传文件项
            if(item.isFormField()){
    
    
                // 说明普通表单向
            }else{
    
    
                // 说明上传文件项
                // 获取上传文件的名称
                String filename = item.getName();
                // 把文件的名称设置唯一值,uuid
                String uuid = UUID.randomUUID().toString().replace("-", "");
                filename = uuid+"_"+filename;
                // 完成文件上传
                item.write(new File(path,filename));
                // 删除临时文件
                item.delete();
            }
        }
        return "success";
    }

}

38.3.5SpringMVCの従来のファイルアップロードの主成分分析

ここに画像の説明を挿入します

38.3.6SpringMVCの従来のファイルアップロードコード

  • SpringMVCフレームワークはMultipartFileオブジェクト、オブジェクトが表すアップロードしたファイル、請求変数名しなければならないフォームファイルタグのname属性名同じ。
  • 1.構成ファイルパーサーオブジェクト
    • springmvc.xml
    <!--配置文件解析器对象-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760" />
    </bean>
  • 2.ファイルアップロード用のコントローラーコントローラーを作成します
    /**
     * SpringMVC文件上传
     * @return
     */
    @RequestMapping("/fileupload2")
    public String fileuoload2(HttpServletRequest request, MultipartFile upload) throws Exception {
    
    
        System.out.println("springmvc文件上传...");

        // 使用fileupload组件完成文件上传
        // 上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        // 判断,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
    
    
            // 创建该文件夹
            file.mkdirs();
        }

        // 说明上传文件项
        // 获取上传文件的名称
        String filename = upload.getOriginalFilename();
        // 把文件的名称设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;
        // 完成文件上传
        upload.transferTo(new File(path,filename));

        return "success";
    }
  • 3.ファイルアップロード用のJSPページを作成します
    <h3>Springmvc文件上传</h3>

    <form action="/user/fileupload2" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>

38.3.7SpringMVCクロスサーバーファイルのアップロード

  • 1.開発に必要なjarパッケージをインポートします
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.18.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.18.1</version>
    </dependency>
  • 2.ファイルアップロード用のJSPページを作成します
    <h3>跨服务器文件上传</h3>

    <form action="/user/fileupload3" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>
  • 3.コントローラーを作成します
    /**
     * 跨服务器文件上传
     * @return
     */
    @RequestMapping("/fileupload3")
    public String fileuoload3(MultipartFile upload) throws Exception {
    
    
        System.out.println("跨服务器文件上传...");

        // 定义上传文件服务器路径
        String path = "http://localhost:9090/uploads/";

        // 说明上传文件项
        // 获取上传文件的名称
        String filename = upload.getOriginalFilename();
        // 把文件的名称设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;

        // 创建客户端的对象
        Client client = Client.create();

        // 和图片服务器进行连接
        WebResource webResource = client.resource(path + filename);

        // 上传文件
        webResource.put(upload.getBytes());

        return "success";
    }

おすすめ

転載: blog.csdn.net/qq_44686266/article/details/114882929