java图片上传
1、图片上传工具类
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
public class PicLoad {
public static String upload(HttpServletRequest request,MultipartFile pictureFile,String fname) throws IOException {
Map<String, String> map = new HashMap<String,String>();
String imgPath=null;
//上传图片
if(!pictureFile.isEmpty()){
// 使用UUID给图片重命名
UUID uuid =UUID.randomUUID();
String name = uuid.toString();
// 获取文件的扩展名
String extention = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
// 设置图片上传路径 获取项目根路径
String url = request.getSession().getServletContext().getRealPath("");
File file = new File(url + "/" + "upload" + "/" + fname+"/"+name + "." + extention);//"/" 代表反斜杠
//判断目标文件所在目录是否存在
if(!file.getParentFile().exists()){
//如果目标文件所在的目录不存在则创建父目录
file.getParentFile().mkdirs();
}
// 上传
pictureFile.transferTo(file);
//String objectPath = request.getSession().getServletContext().getContextPath();
imgPath = "upload"+"/"+ fname+"/"+name + "." + extention;
}
return imgPath;//返回上传后的图片的路径
}
}
2、jsp页面上传图片
<div class="image">
<div class="article">
<div class="item">
<img class="addImg" onclick="clickImg(this);" src="${ctxStatic}/image/card1.PNG" />
<input name="file" id="pic1" type="file" class="upload_input" onchange="change(this)" />
<div class="preBlock">
<img class="preview" id="preview" alt="" name="pic1" />
</div>
<img class="delete" onclick="deleteImg(this)" src="${ctxStatic}/image/delete.png" />
</div>
<div class="item">
<img class="icon addImg" onclick="clickImg(this);" src="${ctxStatic}/image/card2.PNG" />
<input name="file2" id="pic2" type="file" class="upload_input" onchange="change(this)"/>
<div class="preBlock">
<img class="preview" alt="" name="pic2" />
</div>
<img class="delete" onclick="deleteImg(this)" src="${ctxStatic}/image/delete.png" />
</div>
</div>
关键代码:
<input name="file" id="pic1" type="file" class="upload_input" onchange="change(this)" />
name属性的名字一定要和控制层的处理函数中传的参数名称相同,type属性的类型为file,在form表单提交的地方加上enctype="multipart/form-data"
,例如:
<form action="#" method="post" enctype="multipart/form-data">
...
</form>
3、控制层
@RequestMapping("saveI")
public String saveI(HttpServletRequest request,MultipartFile file,MultipartFile file2) throws IOException {
XUser user = new XUser();
user = xUserService.selectByPhone(xUser.getPhone());
String fname = "identify";
//xxx为项目名
String pic1 = "/xxx/" + PicLoad.upload(request, file, fname);
System.out.println(pic1);
String pic2 = "/xxx/" + PicLoad.upload(request, file2, fname);
System.out.println(pic2);
user.setPic1(pic1);
user.setPic2(pic2);
xUserService.update(user);
return "modules/front/job";
}
MultipartFile后面对应的属性名要与jsp页面的name属性对应的名字相同,图片上传的文件名如下图所示:
这样就能顺利看到上传的图片了。