Spring boot實(shí)現(xiàn)文件上傳功能
本文實(shí)例為大家分享了Spring boot實(shí)現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下
1. 創(chuàng)建一個(gè)Maven的web工程,然后配置pom.xml文件,增加依賴(lài):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.0.2.RELEASE</version> </dependency>
2. 在webapp目錄下的index.jsp文件中輸入一個(gè)表單:
<html> <body> <form method="POST" enctype="multipart/form-data" action="/upload"> File to upload: <input type="file" name="file"><br /> Name: <input type="text" name="name"><br /> <br /> <input type="submit" value="Upload"> Press here to upload the file! </form> </body>
這個(gè)表單就是我們模擬的上傳頁(yè)面
3. 編寫(xiě)處理這個(gè)表單的Controller:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class FileUploadController {
@RequestMapping(value="/upload", method=RequestMethod.GET)
public @ResponseBody String provideUploadInfo() {
return "You can upload a file by posting to this same URL.";
}
@RequestMapping(value="/upload", method=RequestMethod.POST)
public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file){
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
stream.write(bytes);
stream.close();
return "You successfully uploaded " + name + " into " + name + "-uploaded !";
} catch (Exception e) {
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name + " because the file was empty.";
}
}
}
4. 然后我們對(duì)上傳的文件做一些限制,同時(shí)編寫(xiě)main方法來(lái)啟動(dòng)這個(gè)web :
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.embedded.MultiPartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import javax.servlet.MultipartConfigElement;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultiPartConfigFactory factory = new MultiPartConfigFactory();
factory.setMaxFileSize("128KB");
factory.setMaxRequestSize("128KB");
return factory.createMultipartConfig();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5. 然后訪問(wèn)http://localhost:8080/upload就可以看到頁(yè)面了。
上面的例子是實(shí)現(xiàn)的是單個(gè)文件上傳的功能,假定我們現(xiàn)在要實(shí)現(xiàn)文件批量上傳的功能的話,我們只需要簡(jiǎn)單的修改一下上面的代碼就行,考慮到篇幅的問(wèn)題,下面只是貼出和上面不同的代碼,沒(méi)有貼出的說(shuō)明和上面一樣。:
1.新增batchUpload.jsp文件
<html> <body> <form method="POST" enctype="multipart/form-data" action="/batch/upload"> File to upload: <input type="file" name="file"><br /> File to upload: <input type="file" name="file"><br /> <input type="submit" value="Upload"> Press here to upload the file! </form> </body> </html>
2. 新增BatchFileUploadController.java文件:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
/**
* Created by wenchao.ren on 2014/4/26.
*/
@Controller
public class BatchFileUploadController {
@RequestMapping(value="/batch/upload", method= RequestMethod.POST)
public @ResponseBody
String handleFileUpload(HttpServletRequest request){
List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");
for (int i =0; i< files.size(); ++i) {
MultipartFile file = files.get(i);
String name = file.getName();
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(new File(name + i)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name + " because the file was empty.";
}
}
return "upload successful";
}
}
這樣一個(gè)簡(jiǎn)單的批量上傳文件的功能就ok了,是不是很簡(jiǎn)單啊。
注意:上面的代碼只是為了演示而已,所以編碼風(fēng)格上采取了隨性的方式,不建議大家模仿。
參考資料:MultipartResolver實(shí)現(xiàn)文件上傳功能
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
1. MultipartResolver也可以實(shí)現(xiàn)文件上傳功能。參考文章:
相關(guān)文章
SpringBoot啟動(dòng)時(shí)自動(dòng)執(zhí)行sql腳本的方法步驟
本文主要介紹了SpringBoot啟動(dòng)時(shí)自動(dòng)執(zhí)行sql腳本的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Struts2 的國(guó)際化實(shí)現(xiàn)方式示例
這篇文章主要介紹了Struts2 的國(guó)際化實(shí)現(xiàn)方式示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
詳解Spring Cloud Hystrix斷路器實(shí)現(xiàn)容錯(cuò)和降級(jí)
本篇文章主要介紹了詳解Spring Cloud Hystrix斷路器實(shí)現(xiàn)容錯(cuò)和降級(jí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Java web過(guò)濾器驗(yàn)證登錄防止未登錄進(jìn)入界面
這篇文章主要介紹了Java web過(guò)濾器驗(yàn)證登錄防止未登錄進(jìn)入界面,在一些系統(tǒng)中經(jīng)??梢杂玫酱斯δ?,對(duì)java web 驗(yàn)證登錄知識(shí)感興趣的朋友一起看下吧2016-08-08
kafka并發(fā)寫(xiě)大消息異常TimeoutException排查記錄
這篇文章主要為大家介紹了kafka并發(fā)寫(xiě)大消息異常TimeoutException的排查記錄及解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

