java-上传与下载文件
一.上传文件流程
1.上传UI可以使用element ui 提供的上传组件。element UI官方示例如下:
<el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple> <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload>
<!-- action为上传的路径 -->
element—upload地址 :https://element.eleme.cn/#/zh-CN/component/upload
2.参考文档,写对应的上传地址配、是否拖拽等配置,以及上传成功或失败的回调函数on-success、on-error等。
3.上传的地址,可以是单独的文件服务器某个路径,也可以是项目部署的服务器某个路径。文件存储的路径要独立,并且不同业务的文件夹也要区分存储。
4.注意,后台使用IOUtil.copy,将文件copy到服务器对应路径时,文件的名称需要使用UUID,进行处理,防止文件重复覆盖。
5.注意,文件的大小需要根据业务,进行合理的限制。
二.文件下载
1.前台将要下载的文件名称传递给后台的下载接口。
2.后台下载接口方式一,补充完整路径,通过流下载文件。
// 判断文件是否存在 File file = new File(pathFile); if(!file.exists()){ return; } // 读取要下载的文件,保存到文件输入流 FileInputStream in = new FileInputStream(pathFile); // 创建输出流 OutputStream out = response.getOutputStream(); // 将输入流中的文件,通过输出流 byte buffer[] = new byte[1024]; int len = 0; // 循环将输入流中的内容读取到缓冲区当中 while((len=in.read(buffer))>0){ // 输出缓冲区的内容到浏览器,实现文件下载 out.write(buffer, 0, len); } // 关闭文件输入流 in.close(); // 关闭输出流 out.close();
参考链接:https://www.cnblogs.com/xdp-gacl/p/4200090.html
3.后台下载接口方式二,通过文件访问路径URL下载:
// 文件路径(upload/img会对应127.0.0.1:8080服务器某一个具体的文件路径,如tomcat配置的虚拟目录对应的实际的文件路径) String urlpath = "https://127.0.0.1:8080/upload/img/1.jpg"; // 文件名称 String fileName = "1.jpg"; public URLDownFile(String urlpath,String fileName) throws Exception { URL url = new URL(urlpath); //下载资源 DataInputStream dataInputStream = new DataInputStream(url.openStream()); FileOutputStream fileOutputStream = new FileOutputStream(new File(fileName)); byte[] bytes = new byte[1024]; int length = 0; while ((length = dataInputStream.read(bytes)) != -1) { fileOutputStream.write(bytes, 0, length); System.out.println("下载中...."); } System.out.println("下载完成..."); dataInputStream.close(); fileOutputStream.close(); }
三.tomcat项目,使用虚拟目录
server.xml文件中:HOST中增加如下内容:
<Context path="/upload/" docBase="/home/data/file/upload/" debug="0" reloadble="true"/>
1.path中的路径,就是浏览器访问路径,或是下载接口中的路径,下载文件时,tomcat最终会将path定位到docBase中配置实际服务器路径。
2.本地开发环境测试上传和下载功能:
1)上传和下载的文件路径,指定在开发本地服务器(主机电脑)上的某个路径。如:D://upload
2)配置tomcat,虚拟目录,如下:
<Context path="/upload/" docBase="D:\\upload\" debug="0" reloadble="true"/>
3)做上传调试,检查目录下是否有上传的文件,有则上传成功。上传成功后,进行下载功能本地调试,结束。
四.IoUtil工具类
1)IO工具类的存在主要针对InputStream、OutputStream、Reader、Writer封装简化,并对NIO相关操作做封装简化。总体来说,Hutool对IO的封装,主要是工具层面,我们努力做到在便捷、性能和灵活之间找到最好的平衡点。
参考链接:https://www.javajike.com/book/hutool/chapter3/bcb6027e4e8d5c3ccb1740fe14d22c49.html
2)下载和上传接口流操作都可以使用IoUtil工具类,如IoUtil.copy()方法简化流操作
浙公网安备 33010602011771号