Web下文件上传下载的路径问题
工程结构
1.生成一个文件到指定文件夹下
//产生一个唯一的名字 this.setFileName(String.valueOf(System.currentTimeMillis())); String path = ServletActionContext.getServletContext().getRealPath("/template/WordExportTemplate"); //工程下的完整路径名 String filepath = path +"\\" + fileName + ".doc"; //写入文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath,true), "utf-8"), 10240); out.write(" ");
2.将指定文件下的文件输出到客户端(将上面产生的文件输出)
public InputStream getInputStream() throws Exception { create(); String path = ServletActionContext.getServletContext().getRealPath("/template/WordExportTemplate"); String filepath = path +"\\" + fileName + ".doc"; //完整的路径名 File file = new File(filepath); //只用返回一个输入流 return FileUtils.openInputStream(file); }
3.将客户端上传的文件以特定名字存到指定文件夹下:
public String execute() throws Exception{ ServletContext servletContext = ServletActionContext.getServletContext(); // fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字 String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileNameFileName); System.out.println(dir); // 文件输出流,写到dir指定的目录与名字 FileOutputStream outputStream = new FileOutputStream(dir); // 打开上传的文件的输入流 FileInputStream inputStream = new FileInputStream(fileName); byte[] buffer = new byte[1024]; int len = 0; // 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中.读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。 while((len = inputStream.read(buffer))!=-1){ // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 outputStream.write(buffer, 0, len); } inputStream.close(); outputStream.close(); return SUCCESS; }
4.读取指定文件夹下指定名字的文件:
ServletContext servletContext = ServletActionContext.getServletContext();
// fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字
String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileNameFileName);
File file = new File(dir);
FileInputStream openInputStream = FileUtils.openInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(openInputStream);
5. FileInputStream FileOutputStream是类。可以直接读取与写。
构造方法
例如:
public InputStream getInputStream() throws Exception { create(); String path = ServletActionContext.getServletContext().getRealPath("/template/ExcelExportTemplate"); String filepath = path +"\\" + fileName + ".xls"; File file = new File(filepath); //只用返回一个输入流 return FileUtils.openInputStream(file); }
String path = ServletActionContext.getServletContext().getRealPath("/template"); File tempFile = new File(path, templateName + ".xls"); tempFile.delete(); tempFile.createNewFile();
FileOutputStream stream = FileUtils.openOutputStream(tempFile);
1 ServletContext servletContext = ServletActionContext.getServletContext(); 2 // fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字 3 String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileName); 4 FileOutputStream outputStream = new FileOutputStream(dir);
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix