Java 上传文件 获取绝对路径

获取项目上传文件绝对路径

String projectUrl = request.getServletContext().getRealPath("/");

本地运行控制台打印出来的结果为【注意打印出掉结果是编译后的target文件夹下的路径】:

D:\JAVA\IDEA-Workspace\shop-member\target\shop-member\

如果 Spring MVC 配置了自定义的根目录:

 

http://192.168.88.91:8080/404.html       

String projectUrl = request.getServletContext().getRealPath("/WEB-INF/static/html/");

String projectUrl = request.getServletContext().getRealPath("/") + "WEB-INF/static/html/";

控制台:

D:\JAVA\IDEA-Workspace\shop-member\target\shop-member\WEB-INF\static\html\

设置文件上传路径:

String filePath = projectUrl + "d.plist";

File file = new File(filePath);

或者

String filePath = request.getServletContext().getRealPath("/") + "WEB-INF/static/html/d.plist";

File file = new File(filePath);

 

 

tomcat的 server.xml配置

 

LOG.info(request.getServletContext().getRealPath("/") + "");

LOG.info(request.getServletContext().getRealPath("/WEB-INF/static/html") + "");

日志输出结果为:

 

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
package com.actionForm; import org.apache.struts.action.*; import org.apache.struts.upload.*; public class FileActionForm extends ActionForm { private String fileName;//上传文件的名称 private String fileSize;//上传文件的大小 private String filePath;//上传文件到服务器的路径 private String fileDate;//上传文件的日期 private FormFile file;//上传文件 public String getFileName() { return fileName; } public FormFile getFile() { return file; } public String getFileSize() { return fileSize; } public String getFilePath() { return filePath; } public String getFileDate() { return fileDate; } public void setFileName(String fileName) { this.fileName = fileName; } public void setFile(FormFile file) { this.file = file; } public void setFileSize(String fileSize) { this.fileSize = fileSize; } public void setFilePath(String filePath) { this.filePath = filePath; } public void setFileDate(String fileDate) { this.fileDate = fileDate; } } package com.action; import org.apache.struts.action.*; import javax.servlet.http.*; import com.actionForm.FileActionForm; import org.apache.struts.actions.DispatchAction; import java.util.Date; import java.text.*; import org.apache.struts.upload.FormFile; import java.io.*; import java.net.URLEncoder; public class FileAction extends DispatchAction { private JDBConnection connection =new JDBConnection(); //以下方法实现文件的上传 public ActionForward upLoadFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward forward=null; Date date = new Date(); FileActionForm fileActionForm = (FileActionForm) form; //FormFile用于指定存取文件的类型 FormFile file = fileActionForm.getFile(); //获取当前的文件 // 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image"); //我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\ String dir="D:\\loadfile\\temp\\"; int i = 0; String type = file.getFileName(); while(i!=-1){ //找到上传文件的类型的位置,这个地方的是'.' i = type.indexOf("."); /**//* System.out.println(i);*/ /**//*截取上传文件的后缀名,此时得到了文件的类型*/ type = type.substring(i+1); } // 限制上传类型为jpg,txt,rar; if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp")) {//当上传的类型不为上述类型时,跳转到错误页面。 forward=mapping.findForward("error"); } else { // 将上传时间加入文件名(这个地方的是毫秒数) String times = String.valueOf(date.getTime()); //组合成 time.type String fname = times + "." + type; //InInputStream是用以从特定的资源读取字节的方法。 InputStream streamIn = file.getInputStream(); //创建读取用户上传文件的对象 //得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available(); // int ok=streamIn.available(); int ok=file.getFileSize(); String strFee = null; //这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte; if(ok>=1024*1024) { float ok1=(((float)ok)/1024f/1024f); DecimalFormat myformat1 = new DecimalFormat("0.00"); strFee = myformat1.format(ok1)+"M"; System.out.println(strFee+"M"); } else if(ok>1024 && ok<=1024*1024) { double ok2=((double)ok)/1024; DecimalFormat myformat2=new DecimalFormat("0.00"); strFee = myformat2.format(ok2)+"kb"; System.out.println(strFee+"kb"); } else if(ok<1024) { System.out.println("aaaaaaaaa"); strFee=String.valueOf(ok)+"byte"; System.out.println(strFee); } System.out.println( streamIn.available()+"文件大小byte"); //这个是io包下的上传文件类 File uploadFile = new File(dir); //指定上传文件的位置 if (!uploadFile.exists() || uploadFile == null) { //判断指定路径dir是否存在,不存在则创建路径 uploadFile.mkdirs(); } //上传的路径+文件名 String path = uploadFile.getPath() + "\\" + fname; //OutputStream用于向某个目标写入字节的抽象类,这个地方写入目标是path,通过输出流FileOutputStream去写 OutputStream streamOut = new FileOutputStream(path); int bytesRead = 0; byte[] buffer = new byte[8192]; //将数据读入byte数组的一部分,其中读入字节数的最大值是8192,读入的字节将存储到,buffer[0]到buffer[0+8190-1]的部分中 //streamIn.read方法返回的是实际读取字节数目.如果读到末尾则返回-1.如果bytesRead返回为0则表示没有读取任何字节。 while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) { //写入buffer数组的一部分,从buf[0]开始写入并写入bytesRead个字节,这个write方法将发生阻塞直至字节写入完成。 streamOut.write(buffer, 0, bytesRead); } // 关闭输出输入流,销毁File流。 streamOut.close(); streamIn.close(); file.destroy(); String paths=path; System.out.println(paths); String fileName = Chinese.toChinese(fileActionForm.getFileName()); //获取文件的名称 //String fileSize = String.valueOf(file.getFileSize()); String fileDate = DateFormat.getDateInstance().format(date); String sql = "insert into tb_file values('" + fileName + "','" + strFee + "','" + fileDate + "','" + paths + "')"; connection.executeUpdate(sql); connection.closeConnection(); forward=mapping.findForward("upLoadFileResult"); } return forward; } //实现文件的下载 public ActionForward downFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String path = request.getParameter("path"); System.out.println(path+"111"); BufferedInputStream bis = null; BufferedOutputStream bos = null; OutputStream fos = null; InputStream fis = null; //如果是从服务器上取就用这个获得系统的绝对路径方法。 String filepath = servlet.getServletContext().getRealPath("/" + path); String filepath=path; System.out.println("文件路径"+filepath); File uploadFile = new File(filepath); fis = new FileInputStream(uploadFile); bis = new BufferedInputStream(fis); fos = response.getOutputStream(); bos = new BufferedOutputStream(fos); //这个就就是弹出下载对话框的关键代码 response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(path, "utf-8")); int bytesRead = 0; //这个地方的同上传的一样。我就不多说了,都是用输入流进行先读,然后用输出流去写,唯一不同的是我用的是缓冲输入输出流 byte[] buffer = new byte[8192]; while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead); } bos.flush(); fis.close(); bis.close(); fos.close(); bos.close(); return null; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值