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()方法简化流操作

 

posted @ 2021-03-04 23:26  对月当歌  阅读(522)  评论(0)    收藏  举报