Java中的文件上传
1 文件上传
-
文件上传:指的是将本地的文件复制到服务器上;
-
SpringMvc中的文件上传是对原生文件上传的封装,目的是,较少代码量,提高开发效率;
-
文件上传三要素:
-
表单的提交的方式必须是POST请求(get请求对提交的数据)
-
表单中必须有一个文件上传项:,文件上传项必须有name属性和值;
-
表单的enctype属性的值必须是multipart/form-data
-
1.1 添加jar文件
- 由于SpringMVC自己没有实现文件上传,它使用的是apache.commons.fileupload
- com.springsource.org.apache.commons.fileupload-1.2.0.jar
- com.springsource.org.apache.commons.io-1.4.0.jar
dependency>
groupId>commons-fileuploadgroupId>
artifactId>commons-fileuploadartifactId>
version>1.3.3version>
dependency>
1.2 jsp页面
1.3 配置上传解析器
SpringMVC使用MultipartFile来进行文件上传,所以我们首先要配置MultipartResolver,用于处理表单中的file,如果没有配置就会报如下错误:提示告诉开发者你没有配置文件上传解析器:
配置MultipartResolver:注意id=”multipartResolver”的id值不能乱写
bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultip服务器托管网artResolver">
property name="maxUploadSize">
value>#{1024*1024}value>
property>
property name="maxUploadSize" value="1048576" />
bean>
1.4 后台处理
@Controller
public class UploadController {
@RequestMapping(value="/upload",method=RequestMethod.POST)
public String服务器托管网 uploadFile(MultipartFile fileUpload,String name,HttpServletRequest req) throws FileNotFoundException, IOException {
System.out.println("普通表单获取方式:" + name);
//上传表单信息:注意MultipartFile对象的名称必须与上传表单项的name属性值一致
System.out.println("上传文件是否为空:" + fileUpload.isEmpty());
System.out.println("上传文件的大小(字节):" + fileUpload.getSize());
System.out.println("上传文件的类型:" + fileUpload.getContentType());
System.out.println("上传表单name属性值:" + fileUpload.getName());
System.out.println("上传文件名:" + fileUpload.getOriginalFilename());
// 获取upload真实路径:一大巨坑(uploadFile千万不要和请求upload一样的名字,否则第二次上传出现405)
String realPath = req.getServletContext().getRealPath("/uploadFile");
File file = new File(realPath);
if (!file.exists()) {// 如果upload文件夹不存在,就创建
file.mkdirs();
}
String prefix = UUID.randomUUID().toString().replaceAll("-", "");
//使用UUID加前缀命名文件,防止名字重复被覆盖
String fileName = prefix+"_"+fileUpload.getOriginalFilename();
InputStream in= fileUpload.getInputStream();;//声明输入输出流
OutputStream out=new FileOutputStream(new File(realPath+""+fileName));//指定输出流的位置;
//使用IOUtils.copy实现文件复制
IOUtils.copy(in, out);
System.out.println("上传成功");
in.close();
out.close();
return "redirect:/upload.jsp";
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: OurBMC社区SIG建设进展(2024年2月)
为更好地推动社区技术发展,打造以技术为核心的开源 BMC 根社区,OurBMC 社区围绕开发者关注的软硬件适配、产业化落地等方向成立了多个 SIG,针对特定或多个技术主题成立不同组,按照不同 SIG 进行组织管理。所有 SIG 均平等开放,欢迎大家加入 SIG…