一般我们实现的图片自定义上传是将图片是上传到tomcat的目录之下,这样会出现一个问题,当你重新部署你的工程的时候,tomcat会将你的图片全部都清空,那么这样你将图片存到数据库当中将会变的毫无意义!接下来实现如何将图片存取在非tomcat的目录之下!!!
1.修改文件输出的位置
- @Controller
- public class ImageController {
-
- @Autowired
- private ImageService imageService;
-
-
- @RequestMapping(value="/uploadImage",method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
- @ResponseBody
- public Map<String,Object> uploadFile(@RequestParam(value = "upfile", required = false) MultipartFile file,
- HttpServletRequest request,HttpServletResponse response){
- Map<String,Object> map = new HashMap<String, Object>();
- String realName = null;
- String uuidName = null;
- String realPath = null;
-
- try {
- Image image = new Image();
- //文件原来的名称
- realName = getRealName(file.getOriginalFilename());
- //得到这个文件的uuidname
- uuidName = this.getUUIDFileName(file.getOriginalFilename());
- //图片保存的工程
- // realPath = request.getServletContext().getRealPath("/images");
- //真实路径
- // String roolPath = request.getSession().getServletContext().getRealPath("/");
-
- //这里测试的是 把图片不存在 发布目录下
- realPath = "F:\\schoolproject\\images";
-
-
- image.setName(realName);
- image.setUrl(realPath);
- image.setUuidname(uuidName);
-
- //得到文件的输入流
- InputStream in = new BufferedInputStream(file.getInputStream());
-
- OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(realPath,uuidName)));
-
- IOUtils.copy(in, out);
- in.close();
- out.close();
-
- int flag = imageService.insertImage(image);
-
- if(flag!=0){
- map.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容
- map.put("url","/images/"+uuidName); //能访问到你现在图片的路径 这里
- map.put("title","");
- map.put("original","realName" );
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- map.put("state", "文件上传失败!"); //在此处写上错误提示信息,这样当错误的时候就会显示此信息
- map.put("url","");
- map.put("title", "");
- map.put("original", "");
- e.printStackTrace();
- }
- return map;
- }
-
-
-
- private String getExtName(String s, char split) {
- int i = s.lastIndexOf(split);
- int leg = s.length();
- return i > 0 ? (i + 1) == leg ? " " : s.substring(i+1, s.length()) : " ";
- }
-
- private String getUUIDFileName(String fileName){
- UUID uuid = UUID.randomUUID();
- StringBuilder sb = new StringBuilder(100);
- sb.append(uuid.toString()).append(".").append(this.getExtName(fileName, '.'));
- return sb.toString();
- }
-
- private String getRealName(String originalName){
- //System.out.println(originalName.contains("."));
-
- if(originalName.contains(".")){
- String [] as = originalName.split("\\.");
- //System.out.println(as[0]);
- return as[0];
- }else {
- return originalName;
- }
-
- }
-
-
- }
在这我们可以看到,我将图片存在了F:\\schoolproject\\images 这个目录下,但是图片显示请求的url任然是map中url这个属性也就是:http://localhost:8080/SpringMVCDemo/images/图片名称,接下来我们就只要修改server.xml文件了!!!
2.修改server.xml文件
到你的eclipse工作目录中找到server.xml文件,我的server.xml文件所在的目录如下:
F:\schoolproject\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf,在<Host></Host>标签中添加下面的一句话
- <Context docBase="F:\schoolproject\images" path="/SpringMVCDemo/images" reloadable="false"/>
意思应该很容易理解!!!!
这样就能访问到你非tomcat目录下的文件了!!!它这里做了个映射而已!
原文链接:http://blog.csdn.net/qq_34292044/article/details/72453119