当前位置: 代码迷 >> Java相关 >> Struts2文件上传下载补充有关问题
  详细解决方案

Struts2文件上传下载补充有关问题

热度:12   发布时间:2016-04-22 20:25:53.0
Struts2文件上传下载补充问题

  上回书说到strust2的文件上传下载,上次是把文件上传上去了,然后傻傻的在数据库中存入了一个绝对路径,在本机上测试取图片的时候各种好使,小小的嘚瑟了一下,觉得文件上传下载不过如此嘛,但是今天,就在今天把项目打包成WAR包运行的时候各种找不到图片,我呢个郁闷啊,开始还以为是打包的时候出问题了,但是又重新打包运行还是不行,后来去看数据库才知道了是上传路径的问题,本机的tomcat是装在d盘,但是打的war包运行的环境tomcat是装在c盘,所以找不到路径了,那么在显示的时候肯定是有问题的:

  文件上传的时候需要给出上传路径,这时候的路径是绝对路径,但是往数据库中存的时候需要存相对路径:

  

//得到工程保存图片的路径        String root = ServletActionContext.getServletContext().getRealPath("/ima");         File destFile = new File(root);         //如果不存在就创建         if (!destFile.exists()) {             destFile.mkdirs();            }         InputStream is = new FileInputStream(ima);         //把图片写入到上面设置的路径里         OutputStream os = new FileOutputStream(destFile+ "\\"+imaFileName);         try {                byte[] b = new byte[1024];// 每次写入的大小                int j = 0;                while ((j = is.read(b)) > 0) {                    os.write(b, 0, j);                }            } catch (Exception e) {                e.printStackTrace();            } finally {                is.close();                os.close();            }

上面代码中的root是绝对路径,绝对路径是什么意思呢?比如说D:\Tomcat 6.0\webapps这就是一个绝对路径,那什么是相对路径呢?Tomcat 6.0\webapps就是一个相对路径,切记相对路径最前面是没有斜线的哦。上传文件时候是相对路径,但是在存入数据库中的时候却要存入相对路径,怎么办?如下:

 String fileUrl="ima"+"\\"+imaFileName;         sysUser.setImgUrl(fileUrl);

这样得到的就是一个相对路径,中间的\\是为了转译\。

  数据库存入的相对路径在下载文件的时候也是个麻烦,最少对我是个麻烦,因为下载的时候从数据库查到的是相对路径,你还需要把相对路径还原成绝对路径,不然这哥们儿不搭理你啊,你肯定取不到这个文件。

取文件跟路径以前使用的都是request.getRealPath(path);但是这哥们儿现在不好使了,也不能说不好使了,就是老了该休息休息了,所以换新的来了,新的方法是:

request.getSession().getServletContext().getRealPath(path);

只需要把path换成你的相对路径就可以找到这个文件了,然后下载的话就是一个I\O流的事了。

    String path=request.getSession().getServletContext().getRealPath("ima\\"+imgName);                  File file = new File(path);        // 以流的形式下载文件。          InputStream fis = new BufferedInputStream(new FileInputStream(path));          byte[] buffer = new byte[fis.available()];          fis.read(buffer);          fis.close();          // 清空response          response.reset();          // 设置response的Header          response.setContentType("application/x-download");          response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(imgName,"utf-8"));          response.addHeader("Content-Length", "" + file.length());          OutputStream toClient = response.getOutputStream();          toClient.write(buffer);          toClient.flush();          toClient.close();

恩,暂时就这样了。

 

1楼莫问天机
赞一个
  相关解决方案