SpringBoot文件上传(form/ajax/axios)

1 篇文章 0 订阅
1 篇文章 0 订阅

Form文件上传

HTML:

<form id="uploadForm" action="/upload/uploadFileByForm" method="post" enctype="multipart/form-data">
    <input id="file" type="file" name="file" /><br />
    <label for="param1">额外参数1:</label><input id="param1" name="param1" value="value1" type="text"/><br />
    <input type="submit" />
</form>

Js:

// 上传文件
function uploadFile(){
    // 获取表单
    let uploadFormEle = document.getElementById("uploadForm");
    // 提交表单
    uploadFormEle.submit();
}

Java:

/**
 * Form文件上传
 * 
 * @param file   文件
 * @param param1 参数1
 * @return 上传结果
 */
@ResponseBody
@PostMapping("/uploadFileByForm")
public Result<Map<String, String>> uploadFileByForm(@Param("file") MultipartFile file, @Param("param1") String param1) {
    // 检查是否接收到文件
    if(file == null){
        return Result.error("文件上传失败");
    }

    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件后缀
    String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

    // 待返回数据
    Map<String, String> data = new HashMap<>();
    data.put("fileName", fileName);
    data.put("fileSuffix", fileSuffix);
    data.put("param1", param1);

    // 返回
    return Result.success(data);
}

Ajax文件上传

HTML:

<body>
    <input id="file" type="file" /><br>
    <label for="param1">额外参数1:</label><input id="param1" type="text" value="value1">
    <button onclick="uploadFile()">提交</button>
</body>

<script src="/js/jquery-3.6.0.min.js"></script>

Js:

// url前缀
let urlPrefix = "/upload";

// 通过ajax上传文件
function uploadFile() {
    // 表单数据
    var formData = new FormData();
    formData.append("file", $("#file")[0].files[0]);
    formData.append("param1",  $("#param1").val());

    // ajax请求
    $.ajax({
        type: "POST",
        url: urlPrefix + "/uploadFileByAjax",
        data: formData,
        processData: false,
        contentType: false,
        success: function (data) {
            console.log(data);
        },
        error: function (e) {
            alert("未知错误");
        }
    });
}

Java:

/**
 * Ajax文件上传
 * 
 * @param file   文件
 * @param param1 参数1
 * @return 上传结果
 */
@ResponseBody
@PostMapping("/uploadFileByAjax")
public Result<Map<String, String>> uploadFileByAjax(@RequestParam("file") MultipartFile file,
        @RequestParam("param1") String param1) {
    // 检查是否接收到文件
    if (file == null) {
        return Result.error("文件上传失败");
    }

    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件后缀
    String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

    // 待返回数据
    Map<String, String> data = new HashMap<>();
    data.put("fileName", fileName);
    data.put("fileSuffix", fileSuffix);
    data.put("param1", param1);

    // 返回
    return Result.success(data);
}

Axios文件上传

HTML:

<body>
	<input id="file" type="file" /><br>
	<label for="param1">额外参数1:</label><input id="param1" type="text" value="value1"><br/>
	<button onclick="uploadFile()">提交</button>
</body>

<!-- 直接使用axios.min.js上传文件,请先用多行注释/**/注释掉axios.min.js最后一行内容 -->
<script src="/js/axios.min.js"></script>

Js:

// url前缀
let urlPrefix = "/upload";

// 通过ajax上传文件
function uploadFile() {
    // url前缀
    let urlPrefix = "/upload";

    // 上传文件
    function uploadFile() {
        // 表单数据
        let data = new FormData();
        data.append("file", document.getElementById("file").files[0]);
        data.append("param1", document.getElementById("param1").value);

        // axios请求
        axios.post(
            urlPrefix + "/uploadFileByAxios",
            data, 
            {
                headers: {
                    "Content-Type": "multipart/form-data"
                }
            },
        )
        .then(res => {
            let result = res.data;
            console.log(result);
        })
        .catch(err => {
            console.log(err);
        })
    }
}

Java:

/**
 * Axios文件上传
 * 
 * @param file   文件
 * @param param1 参数1
 * @return 上传结果
 */
@ResponseBody
@PostMapping("/uploadFileByAxios")
public Result<Map<String, String>> uploadFileByAxios(@RequestParam("file") MultipartFile file,
        @RequestParam("param1") String param1) {
    // 检查是否接收到文件
    if (file == null) {
        return Result.error("文件上传失败");
    }

    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件后缀
    String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

    // 待返回数据
    Map<String, String> data = new HashMap<>();
    data.put("fileName", fileName);
    data.put("fileSuffix", fileSuffix);
    data.put("param1", param1);

    // 返回
    return Result.success(data);
}

UploadController.java

package replace.your.package;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件上传控制器
 */
@RestController
@RequestMapping("/upload")
public class UploadController {

    /**
     * Form文件上传
     * 
     * @param file   文件
     * @param param1 参数1
     * @return 上传结果
     */
    @ResponseBody
    @PostMapping("/uploadFileByForm")
    public Result<Map<String, String>> uploadFileByForm(@Param("file") MultipartFile file, @Param("param1") String param1) {
        // 检查是否接收到文件
        if(file == null){
            return Result.error("文件上传失败");
        }

        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件后缀
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

        // 待返回数据
        Map<String, String> data = new HashMap<>();
        data.put("fileName", fileName);
        data.put("fileSuffix", fileSuffix);
        data.put("param1", param1);

        // 返回
        return Result.success(data);
    }

    /**
     * Ajax文件上传
     * 
     * @param file   文件
     * @param param1 参数1
     * @return 上传结果
     */
    @ResponseBody
    @PostMapping("/uploadFileByAjax")
    public Result<Map<String, String>> uploadFileByAjax(@RequestParam("file") MultipartFile file,
            @RequestParam("param1") String param1) {
        // 检查是否接收到文件
        if (file == null) {
            return Result.error("文件上传失败");
        }

        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件后缀
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

        // 待返回数据
        Map<String, String> data = new HashMap<>();
        data.put("fileName", fileName);
        data.put("fileSuffix", fileSuffix);
        data.put("param1", param1);

        // 返回
        return Result.success(data);
    }

    /**
     * Axios文件上传
     * 
     * @param file   文件
     * @param param1 参数1
     * @return 上传结果
     */
    @ResponseBody
    @PostMapping("/uploadFileByAxios")
    public Result<Map<String, String>> uploadFileByAxios(@RequestParam("file") MultipartFile file,
            @RequestParam("param1") String param1) {
        // 检查是否接收到文件
        if (file == null) {
            return Result.error("文件上传失败");
        }

        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件后缀
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));

        // 待返回数据
        Map<String, String> data = new HashMap<>();
        data.put("fileName", fileName);
        data.put("fileSuffix", fileSuffix);
        data.put("param1", param1);

        // 返回
        return Result.success(data);
    }
}

Result.java

package replace.your.package;

import java.util.Date;

/**
 * 响应结果
 */
public class Result<D> {
    // 结果代码
    private Integer code;
    // 返回消息
    private String message;
    // 返回数据
    private D data;
    // 返回时间
    private Date time;

    // 构造方法
    public Result(){
        this(0, "ok", null);
    }

    public Result(D data){
        this(0, "ok", data);
    }

    public Result(Integer code, String message){
        this(code, message, null);
    }

    public Result(Integer code, String message, D data){
        this.code = code;
        this.message = message;
        this.data = data;
        this.time = new Date();
    }

    // 静态方法
    public static <D> Result<D> success(){
        return new Result<D>();
    }

    public static <D> Result<D> success(D data){
        return new Result<D>(data);
    }
    
    public static <D> Result<D> error(){
        return new Result<D>(-1, "error");
    }

    public static <D> Result<D> error(String message){
        return new Result<D>(-1, message);
    }

    public static <D> Result<D> error(Integer code, String message){
        return new Result<D>(code, message, null);
    }

    public static <D> Result<D> error(Integer code, String message, D data){
        return new Result<D>(code, message, data);
    }

    /**
     * Get/Set
     */
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public D getData() {
        return data;
    }

    public void setData(D data) {
        this.data = data;
    }

    // ToString
    @Override
    public String toString() {
        return "Result: {" + 
            "\"code\": \"" + this.code + "\", " + 
            "\"message\": \"" + this.message +  "\", " + 
            "\"time\": \"" + this.time + "\", " + 
            "\"data\": \"" + this.data + "\"" + 
            "}";
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值