Java中的多種文件上傳方式總結(jié)
請(qǐng)求類(lèi)型

單文件上傳

//上傳單個(gè)文件
@ResponseBody
@RequestMapping(value = "uploadfile", produces = "multipart/form-data;charset=UTF-8")
public String uploadfiles(HttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
DefaultMultipartHttpServletRequest multipartRequest = (DefaultMultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartRequest.getFile("file");
if (multipartFile == null) {
System.out.println("multipartFile == null");
}
String filename = multipartRequest.getFile("file").getOriginalFilename();
String tmpFile = request.getSession().getServletContext().getRealPath("/") + UUID.randomUUID().toString().replace("-", "") + ".apk";
File targetFile = new File(tmpFile);
AppEntity appEntity = new AppEntity();
if (null != multipartFile) {
//保存文件
try {
multipartFile.transferTo(targetFile);
} catch (IllegalStateException e) {
logger.error("multipartFile.transferTo, IllegalStateException", e);
} catch (IOException e) {
logger.error("multipartFile.transferTo, IOException", e);
}
}
}
return "";
}多文件上傳
多文件單字段上傳

@ResponseBody
@RequestMapping(value = "uploadfiles", produces = "multipart/form-data;charset=UTF-8")
public String uploadfile(MultipartHttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
//上傳多個(gè)文件,一個(gè)字段中包含多個(gè)文件
String projectPath = request.getSession().getServletContext().getRealPath("/");
MultiValueMap<String, MultipartFile> multiFileMap = request.getMultiFileMap();
List<MultipartFile> fileSet = new LinkedList<>();
for(Map.Entry<String, List<MultipartFile>> temp : multiFileMap.entrySet()){
fileSet = temp.getValue();
}
for(MultipartFile temp : fileSet){
File file2 = new File(projectPath+temp.getOriginalFilename());
try {
temp.transferTo(file2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "";
}多文件多字段上傳

@ResponseBody
@RequestMapping(value = "uploadfiles", produces = "multipart/form-data;charset=UTF-8")
public String uploadfile(MultipartHttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
//上傳多個(gè)文件,每個(gè)字段一個(gè)文件
Iterator<String> fileNames = request.getFileNames();
while (fileNames.hasNext()){
// 取得上傳文件
String uploadName = fileNames.next();
MultipartFile file = request.getFile(uploadName);
if (file != null) {
String projectPath = request.getSession().getServletContext().getRealPath("/");
String originalFilename = file.getOriginalFilename();
String tmpFile = projectPath + System.currentTimeMillis() + "_" + originalFilename;
File targetFile = new File(tmpFile);
try {
file.transferTo(targetFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return "";
}如果上面方法不行,看下面
@PostMapping(value = "test", produces = "multipart/form-data;charset=UTF-8")
public void UploadFiles(HttpServletRequest request) throws IOException {
//如果請(qǐng)求中包含文件
if(ServletFileUpload.isMultipartContent(request)){
// 創(chuàng)建一個(gè)通用的多部分解析器
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> files = multipartRequest.getFiles("file");
File targetFile;
for (MultipartFile file : files){
//保存文件到本地
String projectPath = request.getSession().getServletContext().getRealPath("/");
projectPath = projectPath + System.currentTimeMillis() + "_" + new Random().nextInt(100);
File dir = new File(projectPath);
if (!dir.exists()){
dir.mkdir();
}
String originalFilename = file.getOriginalFilename();
String tmpFile = projectPath + File.separator + originalFilename;
targetFile = new File(tmpFile);
file.transferTo(targetFile);
//將文件保存到本地并記錄信息
//...
}
}
}還有一種方法,函數(shù)入?yún)⒅苯咏邮芪募?/strong>
例如:
//單文件
public String UploadFiles(@RequestParam("file") MultipartFile file){
}
//多文件
public String UploadFiles(@RequestParam("file") List<MultipartFile> files){
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Data?JPA系列QueryByExampleExecutor使用詳解
這篇文章主要為大家介紹了Spring?Data?JPA系列QueryByExampleExecutor使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
寶塔面板配置及部署javaweb教程(全網(wǎng)最全)
這篇文章主要介紹了寶塔面板配置及部署javaweb教程(全網(wǎng)最全),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Java?MyBatis傳出參數(shù)resultType和resultMap解讀
這篇文章主要介紹了Java?MyBatis傳出參數(shù)resultType和resultMap解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
java生成excel并導(dǎo)出到對(duì)應(yīng)位置的方式
這篇文章主要介紹了java生成excel并導(dǎo)出到對(duì)應(yīng)位置的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Spring5新功能@Nullable注解及函數(shù)式注冊(cè)對(duì)象
這篇文章主要為大家介紹了Spring5新功能詳解@Nullable注解及函數(shù)式注冊(cè)對(duì)象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問(wèn)題
這篇文章主要介紹了SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

