SpringBoot2.X (十):檔案上傳
我們利用 SpringMVC 中的 MultipartFile 來進行檔案上傳作業
前端程式碼(因為最近一直做的是前後端分離,前端寫的有點醜,勿怪~~~):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>檔案上傳</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/file/upload">
檔案:<input type="file" name="file"/>
姓名:<input type="text" name="name"/>
<input type="submit" value="上傳"/>
</form>
</body>
</html>
後端實現:
package com.fxbin123.controller;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Created with IntelliJ IDEA.
* User: fxbin
* Date: 2018/5/30
* Time: 5:43
* Description:
*/
@RestController
@RequestMapping("/file")
public class FileController {
private final static String filePath = "D://data/";
@RequestMapping("/upload")
public JSONObject upload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
JSONObject result = new JSONObject();
// 姓名
String name = request.getParameter("name");
System.out.println("姓名:" + name);
// 檔名
String fileName = file.getOriginalFilename();
System.out.println("檔名: " + fileName);
// 檔案字尾
String suffixName = fileName.substring(fileName.lastIndexOf("."));
System.out.println("檔案字尾名: " + suffixName);
// 重新生成唯一檔名,用於儲存資料庫
String newFileName = UUID.randomUUID().toString()+suffixName;
System.out.println("新的檔名: " + newFileName);
//建立檔案
File dest = new File(filePath + newFileName);
Map map = new HashMap();
map.put("filePath", dest.getAbsolutePath());
map.put("name", name);
try {
file.transferTo(dest);
result.put("success", true);
result.put("data", map);
return result;
} catch (IOException e) {
e.printStackTrace();
}
return (JSONObject) result.put("success", false);
}
}
接下來簡單測試一下:
然而,,,哦啊,,,報錯了(尷尬了)。。。
原來是我D 盤 沒有data 目錄,建立之,再來一次,成功,同時列印出了我們的期望值
看下D盤 data 目錄,我們上傳的圖片已經靜靜的躺在了那裡~~~
使用返回的檔案路徑,同樣可以檢視已經上傳的圖片
當然了,在實際開發中,我們需要上傳的檔案大小做限制,這裡我們在 application.yml 中通過配置的方式 限制上傳大小為 100kb
spring:
servlet:
multipart:
max-file-size: 100kb
我們就上傳這張 600kb 的圖片,看看會如何。。。
果然,不能太囂張啊,這張圖片有點囂張,被成功的攔截了。。。瀏覽器返回的資訊告訴我們最大限制是 100kb ,與我們的期望相符,當然了,對檔案大小的限制不止這一種方法,
還可以通過 直接獲取 上傳檔案的大小, ex:
file.getSize();
# 在程式碼中對上傳的檔案大小做限制
或者在 Application 類中 註冊MultiPartConfigElement 的方式
package com.fxbin123;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import javax.servlet.MultipartConfigElement;
/**
* Created with IntelliJ IDEA.
* User: fxbin
* Date: 2018/5/22
* Time: 23:06
* Description:
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//單個檔案最大 KB,MB
factory.setMaxFileSize("100KB");
/// 設定總上傳資料總大小
factory.setMaxRequestSize("1024000KB");
return factory.createMultipartConfig();
}
}
在此就不一一進行敘述,有興趣的朋友可自行嘗試
相關文章
- 單個檔案上傳和批量檔案上傳
- 檔案上傳
- Java大檔案上傳、分片上傳、多檔案上傳、斷點續傳、上傳檔案minio、分片上傳minio等解決方案Java斷點
- 檔案上傳之三基於flash的檔案上傳
- 前端大檔案上傳/分片上傳前端
- PHP上傳檔案PHP
- 檔案上傳概述
- ajaxfileupload 檔案上傳
- Flask——檔案上傳Flask
- Linux上傳檔案Linux
- 檔案上傳漏洞
- minio上傳檔案
- SpringBoot上傳檔案Spring Boot
- JavaScript 檔案上傳JavaScript
- Git上傳檔案Git
- .NET Core 如何上傳檔案及處理大檔案上傳
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- PHP ftp上傳檔案PHPFTP
- 上傳檔案專題
- 上傳檔案至GitHubGithub
- 使用fileinput上傳檔案
- WebAPI Angularjs 上傳檔案WebAPIAngularJS
- Ajax 之檔案上傳
- 檔案上傳測試
- HTTP檔案上傳原理HTTP
- SpringMVC之檔案上傳SpringMVC
- 上傳檔案的陷阱
- laravel 多檔案上傳Laravel
- springboot上傳檔案配置Spring Boot
- 檔案上傳下載
- ServletFileUpload類上傳檔案Servlet
- WEB漏洞——檔案上傳Web
- Java Web 檔案上傳JavaWeb
- Linux——拖拽上傳檔案Linux
- PHP 分片上傳檔案PHP
- Aliyun Oss 上傳檔案
- SpringMVC檔案上傳下載(單檔案、多檔案)SpringMVC
- vue-resource+iview上傳檔案取消上傳VueView