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 + "\"" +
"}";
}
}