java 后台通过IO流把文件传到前端并下载
我的业务需求是两个不同的web程序放在不同的服务器上,web程序A要访问到web程序B上传上来的文件,所以用到了这一个IO读取文件的接口
JAVA代码(排版有点问题 已经尽力补救了(:3_ヽ)_)
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @Controller
- @RequestMapping(value = "/manage")
- public class ManageAction{
- /**
- * 通过流把文件传到前台下载
- * @param request
- * @param response
- * @param id 第几个文件 (因为有多个文件 用;号隔开的)
- * @param tzggid 对应的通知公告id
- */
- @RequestMapping(value = "/findfile")
- @ResponseBody
- public void findfile(HttpServletRequest request,HttpServletResponse response,@RequestParam("id") String id,@RequestParam("tzggid") String tzggid) throws IOException {
- ServletOutputStream out = null;
- FileInputStream ips = null;
- List<Map<String, Object>> list = null; //此处为业务需要
- list = jdbcTemplate.queryForList("select fjaddress,fjname from tb_tzgg where id = ?",tzggid); //此处为业务需要
- if(list.size() > 0){
- try {
- String url = String.valueOf(list.get(0).get("fjaddress")).split(";")[Integer.valueOf(id)]; //此处为业务需要 如果是测试可以指定路径
- //获取文件存放的路径
- File file = new File(url);
- String fileName=file.getName();
- //获取到文字 数据库里对应的附件名字加上老的文件名字:filename 截取到后面的文件类型 例:txt 组成一个新的文件名字:newFileName
- String newFileName = String.valueOf(list.get(0).get("fjname")).split(";")[Integer.parseInt(id)]+"."+fileName.substring(fileName.lastIndexOf(".")+1);
- if(!file.exists()) {
- //如果文件不存在就跳出
- return;
- }
- ips = new FileInputStream(file);
- response.setContentType("multipart/form-data");
- //为文件重新设置名字,采用数据库内存储的文件名称
- response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(newFileName.getBytes("UTF-8"),"ISO8859-1") + "\"");
- out = response.getOutputStream();
- //读取文件流
- int len = 0;
- byte[] buffer = new byte[1024 * 10];
- while ((len = ips.read(buffer)) != -1){
- out.write(buffer,0,len);
- }
- out.flush();
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- try {
- out.close();
- ips.close();
- } catch (IOException e) {
- System.out.println("关闭流出现异常");
- e.printStackTrace();
- }
- }
- }
- return ;
- }
- }
前端访问:
贴上我自己的数据库让你们更清晰一点
以上就是所有的java通过io流访问文件的后台全部代码了。希望能帮到你们
https://blog.csdn.net/L1481333167/article/details/81705769
java 后台通过IO流把文件传到前端并下载的更多相关文章
- java中的IO流之文件复制
O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...
- Java中常用IO流之文件流的基本使用姿势
所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流. ...
- java用字符io流复制文件
一.小文件一次快速读写 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...
- java中的IO流读取文件
1 InputStream类和OutputStream类 InputStream.read()方法从文件中读取一个字节(0-255),然后将此字节转换成对应的整数返回.假设一个文件的编码为utf-8编 ...
- java中使用IO流复制文件
public class TestIO { public static void main(String[] args) { // TODO Auto-generated method stub tr ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
随机推荐
- CF911G Mass Change Queries(线段树+暴力)
cf机子真的快. 其实这个题的维护的信息还是很巧妙的. 首先,观察到题目中涉及到,区间修改这个操作,然后最后只查询一次,我们不妨用线段树来维护这个过程. 但是貌似直接维护每个位置的值可能不太好维护. ...
- FastAPI 学习之路(九)请求体有多个参数如何处理?
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- 返回值优化 RVO
<深度探索C++对象模型>-- 2.3 返回值的初始化 & 在编译器层面做优化
- NC105 二分查找法
二分查找(一) 二分查找看似简单,但是有很多的细节要注意. 题目是牛客NC105,找到有序数组中第一个大于或者等于所查找的数字. 初步写了如下的代码: class Solution { public: ...
- Linux常用命令介绍(满足日常操作)
大家好,今天来给大家分享一些Linux的常用命令,希望对大家有用 命令行的基本格式: 命令字 [选项] [参数] 其中,命令字.选项.参数之间用空格分开,多余的空格将被忽略.[ ]括起来的 ...
- airtext初始化(一)
- 2019OO第三单元作业总结
OO第三单元的作业主题是JML规格化设计,作业以图及图的最短路径相关计算为载体,体现接口的规格化设计. ------------------------------------------------ ...
- FastAPI 学习之路(三十四)数据库多表操作
之前我们分享的是基于单个的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计. class User(Base): __tablename__ = "users&q ...
- 方阵里面的dp
打了一场luogu的信心赛,惊讶地发现我不会T2,感觉像这样在矩阵里面的dp看起来很套路的样子,但是仔细想想还是有很多需要注意的细节. 又想到之前貌似也考过一些类似的题目 然而我并没有改 ,于是打算补 ...
- 常用Java API:HashMap 和 TreeMap
摘要 本文主要介绍Map接口下的HashMap和TreeMap. HashMap HashMap是基于哈希表的 Map 接口的实现,是无序的 clear()//清空. containsKey(Obje ...