文件上传使用的工具:https://commons.apache.org/proper/commons-fileupload/faq.html
文件上传的前提条件:
- form表单method="post"
- form表单enctype="multipart/form-data"
- form表单持有file类型input进行文件选择(二进制数据)
上传案例:
// 1、初始化FileUpload组件
FileItemFactory factory = new DiskFileItemFactory();
/**
* FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象
* ServletFileUpload 则是为FileUpload组件提供Java Web的Http请求解析
*/
ServletFileUpload sf = new ServletFileUpload(factory);
// 2、遍历所有FileItem
try {
List<FileItem> formData = sf.parseRequest(request);
for (FileItem fi : formData){
if (fi.isFormField()){
System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
}else {
System.out.println("文件上传项:" + fi.getFieldName());
// 3、文件保存到服务器目录
//获得文件上传的绝对路径
String path = request.getServletContext().getRealPath("/upload");
// String path = "D:\\Imooc\\week13-14\\mgallery\\web\\upload";//现在只能想到写死,呃
System.out.println("上传文件目录:" + path);
String fileName = UUID.randomUUID().toString();
// fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg--> .jpg
String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
// fi.write()写入目标文件
fi.write(new File(path,fileName+suffix));
}
}
} catch (Exception e) {
e.printStackTrace();
}
使用idea开发,我web有一个upload文件夹,想把图片上传到web下面的upload下,即 D:\Imooc\week13-14\mgallery\web\upload,但是每次上传的地址都是 D:\Imooc\week13-14\mgallery\out\artifacts\mgallery_war_exploded\upload。就是war包下面编译文件中的upload。
解决方法:
把上面的OutPut directory 地址改为web就好了,如下:
真实的上传路径地址就是web下的upload了。
如果你的实在弄不好,又着急的话,那就先写死吧。不过,我相信问题总会解决的,加油啊!
标签:idea,web,fileupload,文件,commons,upload,path,fi,上传 From: https://www.cnblogs.com/LittleKevin/p/16903502.html