
java实现文件下载(前端传文件后端以流的方式进行输出)
FilePath和FileName是我定义的全局变量,前面通过另一个接口将文件上传到本地后把文件的名字(带后缀)和路径赋值给这两个全局变量。其实文件的下载在前面的博客当中已经提到过了,但是本次单出一片博客的目的主要还是想把流程给理清楚,授人以鱼不如授人以渔对吧。一、获取文件名和路径(由于前端传来的是一个文件,需要下载到本地,所以需要将获取到的文件先上传到本地)好了,知道了大概的流程,那接下来就来看
·
其实文件的下载在前面的博客当中已经提到过了,但是本次单出一片博客的目的主要还是想把流程给理清楚,授人以鱼不如授人以渔对吧。
想要看文件上传的请跳转到前面一篇博文:
那接下来我们来看看具体的实现步骤吧~
一、获取文件名和路径(由于前端传来的是一个文件,需要下载到本地,所以需要将获取到的文件先上传到本地)
二、设置响应格式
三、读取文件写入字节数组
四、读取文件写入响应对象
五、关闭流
好了,知道了大概的流程,那接下来就来看看具体的代码吧~~
public R downloadFile(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 1、获取文件路径和文件名
String filePath = FilePath;
String fileName = FileName;
System.out.println("filePath:" + filePath + " fileName:" + fileName);
// 2、设置响应头,指定下载文件的名称
response.setHeader("Content-Disposition",
"attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
try {
// 3、读取文件内容到字节数组
byte[] fileByte = new byte[(int) file.length()];
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len;
while ((len = fileInputStream.read(bytes, 0, bytes.length)) != -1) {
byteArrayOutputStream.write(bytes, 0, len);
}
byteArrayOutputStream.close();
fileByte = byteArrayOutputStream.toByteArray();
// 4、将文件内容写入响应对象
OutputStream outputStream = response.getOutputStream();
outputStream.write(fileByte);
outputStream.flush();
// 5、关闭流
fileInputStream.close();
outputStream.close();
// 返回成功信息
return R.Success("文件下载成功");
} catch (Exception e) {
// 如果下载失败,返回失败信息
e.printStackTrace();
return R.Failed("文件下载失败");
}
}
FilePath和FileName是我定义的全局变量,前面通过另一个接口将文件上传到本地后把文件的名字(带后缀)和路径赋值给这两个全局变量。
R是我自定义的响应类,读者可以根据自己的项目情况做修改~
更多推荐
所有评论(0)