1.文件上傳的前提
- 需要導包: commons-fileupload.jar, commons-io.jar
- 需要提供上傳文件的表單域: <input type=”file”name=”” />
- 表單的提交方式必須是post方式
- 表單的enctype屬性必須是multipart/form-data
2.使用SpringMVC進行文件上傳
除了上述要求以外, 需要配置文件上傳解析器(多部件解析器). 如果配置了多部件解析器, 那麼, 在控制器方法中, 就可以通過MultipartFile對象來接收到上傳的文件.
<!--多部件解析器, 文件上傳, 底層依賴commons-fileupload.jar-->
<!--id必須是multipartResolver, 別的無效-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
@Controller
public class DemoController {
@PostMapping("/upload")
public String upload(MultipartFile photo, String username, HttpServletRequest req) throws Exception {
/*System.out.println("isEmpty: " + photo.isEmpty());
System.out.println("originalFilename: " + photo.getOriginalFilename());
System.out.println("表單域的name屬性: " + photo.getName());
System.out.println("文件的MIME類型: " + photo.getContentType());
System.out.println("文件的大小: " + photo.getSize());*/
// 定位存儲路徑
File dir = new File(req.getServletContext().getRealPath("/upload"));
// 沒有就創建
if(!dir.exists()) {
dir.mkdirs();
}
// 重新生成文件的名稱: 時間戳, uuid
String oname = photo.getOriginalFilename();
String name = UUID.randomUUID().toString() +
oname.substring(oname.lastIndexOf("."));
// 定位文件
File file = new File(dir, name);
// 完成文件的上傳
photo.transferTo(file);
return "forward:/index.jsp";
}
}