一個SpringMVC的文件上傳示例
1、jsp頁面代碼
<%@pagepageEncoding="utf-8"%>
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>上傳圖片</title>
</head>
<body>
<formaction="message.do">
<inputtype="text"name="test"value="Submit"/><inputtype="submit"
value="Submit"/>
</form>
<formaction="upload.do"method="post"enctype="multipart/form-data">
<inputtype="file"name="file"/><inputtype="submit"value="Submit"/>
</form>
</body>
</html>
2、action代碼
@RequestMapping(value="/upload.do")
publicStringupload(@RequestParam(value="file",required=false)MultipartFilefile,HttpServletRequestrequest,
ModelMapmodel){
Stringpath="/Users/xieyuhai/Desktop";//更換一下路徑
StringfileName=file.getOriginalFilename();
//StringfileName=newDate().getTime()+".jpg";
System.out.println(path);
FiletargetFile=newFile(path,fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try{
file.transferTo(targetFile);
}catch(Exceptione){
e.printStackTrace();
}
model.addAttribute("resultUrl",request.getContextPath()+"/upload/"+fileName);
return"result";
}
❷ MultipartFile上傳文件資料庫保存進了但是target裡面沒有圖片
在某些業務中,大文件上傳是一個比較重要的交互場景,如上傳入庫比較大的Excel表格數據、上傳影音文件等。如果文件體積比較大,或者網路條件不好時,上傳的時間會比較長(要傳輸更多的報文,丟包重傳的概率也更大),用戶不能刷新頁面,只能耐心等待請求完成。
下面從文件上傳方式入手,整理大文件上傳的思路,並給出了相關實例代碼,由於PHP內置了比較方便的文件拆分和拼接方法,因此服務端代碼使用PHP進行示例編寫。
文件上傳的幾種方式
首先我們來看看文件上傳的幾種方式。
普通表單上傳
使用PHP來展示常規的表單上傳是一個不錯的選擇。首先構建文件上傳的表單,並指定表單的提交內容類型為enctype="multipart/form-data",表明表單需要上傳二進制數據。
❸ spring mvc 多文件上傳時報錯MultipartHttpServletRequest
1、確認<form name="contractForm" id="contractForm" action="" method="post" enctype ="multipart/form-data">;
2、確認commons-fileupload.jar 和 org.springframework.web.jar 存在環境
3、MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
這一句會報錯:ApplicationHttpRequest cannot be cast to MultipartHttpServletRequest
解決辦法是通過這種方式:
MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
❹ 求SpringMVC大文件上傳詳解及實例代碼
SpringMVC的文件上傳非常簡便,首先導入文件上傳依賴的jar:
<!-- 文件上傳所依賴的jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
在springMVC-servlet.xml配置文件中配置文件解析器:
<!--1*1024*1024即1M resolveLazily屬性啟用是為了推遲文件解析,以便捕獲文件大小異常 -->
<!--文件上傳解析器-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1048576"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>
注意解析器的id必須等於multipartResolver,否則上傳會出現異常
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.File;
@Controller
public class FileController {
/**
* 上傳單個文件操作
* MultipartFile file就是上傳的文件
* @return
*/
@RequestMapping(value = "/upload1.html")
public String fileUpload1(@RequestParam("file") MultipartFile file) {
try {
//將上傳的文件存在E:/upload/下
FileUtils.InputStreamToFile(file.getInputStream(), new File("E:/upload/",
file.getOriginalFilename()));
} catch (Exception e) {
e.printStackTrace();
}
//上傳成功返回原來頁面
return "/file.jsp";
}}
上傳文件時,Controller的方法中參數類型是MultipartFile即可將文件映射到參數上。
頁面:
file.jsp:
<form method="post" action="/upload1.html" enctype="multipart/form-data">
<input type="file" name="file"/>
<button type="submit" >提交</button>
</form>