当前位置: 首页 > news >正文

b2b网站大全前十名网站备案查询系统

b2b网站大全前十名,网站备案查询系统,什么是网站权重,如何用书签 做网站接口SpringBoot实现文件下载的几种方式 1. 将文件以流的形式一次性读取到内存,通过响应输出流输出到前端1.1 下载文件 2. 将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存,通过响应输出流输出到前端3. 下载网络文件到本地4. 网络…

SpringBoot实现文件下载的几种方式

    • 1. 将文件以流的形式一次性读取到内存,通过响应输出流输出到前端
      • 1.1 下载文件
    • 2. 将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存,通过响应输出流输出到前端
    • 3. 下载网络文件到本地
    • 4. 网络文件获取到服务器后,经服务器处理后响应给前端

1. 将文件以流的形式一次性读取到内存,通过响应输出流输出到前端

/**
* @param path 想要下载的文件的路径
* @param response
* @功能描述 下载文件:
*/
@RequestMapping("/download")
public void download(String path, HttpServletResponse response) {
try {
// path是指想要下载的文件的路径
File file = new File(path);
log.info(file.getPath());
// 获取文件名
String filename = file.getName();
// 获取文件后缀名
String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
log.info("文件后缀名:" + ext);// 将文件写入输入流
FileInputStream fileInputStream = new FileInputStream(file);
InputStream fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
//Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
//attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
// filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
// 告知浏览器文件的大小
response.addHeader("Content-Length", "" + file.length());
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
outputStream.write(buffer);
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();}
} 

1.1 下载文件

@RequestMapping("getFile")
@ResponseBody
public void getFile(HttpServletResponse response) throws Exception{File readFile = new File("/home/ssx/Music/CloudMusic/夜曲-周杰伦.flac");//字节流-用于读文件  这里只是demo用的非缓冲流。实际项目可以用BufferedInputStream。 此功能是读取图片,所以用的字节流。如果是文本的话可以用字符流效率高,具体类看下面注释//        BufferedReader bufferedReader = new BufferedReader(new FileReader(readFile));//字符流FileInputStream fileInputStream = new FileInputStream(readFile);//字节流//设置文件下载方式response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode("夜曲-周杰伦.flac","utf-8"));//获取servlet响应输出字节流//        PrintWriter writer = response.getWriter();//字符流ServletOutputStream outputStream = response.getOutputStream(); //字节流//流数据交换,每次交换10k数据大小 (1024k = 1m)byte[] bytes = new byte[1024*10];int read;do {read = fileInputStream.read(bytes);outputStream.write(bytes,0,read);}while (-1 != read);//关闭资源IOUtils.closeQuietly(fileInputStream);IOUtils.closeQuietly(outputStream);
}

2. 将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存,通过响应输出流输出到前端

/**
* @param path 指想要下载的文件的路径
* @param response
* @功能描述 下载文件:将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存
*/
@RequestMapping("/downloadLocal")
public void downloadLocal(String path, HttpServletResponse response) throws IOException {
// 读到流中
InputStream inputStream = new FileInputStream(path);// 文件的存放路径
response.reset();
response.setContentType("application/octet-stream");
String filename = new File(path).getName();
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int len;
//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
inputStream.close();
} 

3. 下载网络文件到本地

/**
* @param path 下载后的文件路径和名称
* @param netAddress 文件所在网络地址
* @功能描述 网络文件下载到服务器本地
*/
@RequestMapping("/netDownloadLocal")
public void downloadNet(String netAddress, String path) throws IOException {
URL url = new URL(netAddress);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(path);int bytesum = 0;
int byteread;
byte[] buffer = new byte[1024];
while ((byteread = inputStream.read(buffer)) != -1) {
bytesum += byteread;
System.out.println(bytesum);
fileOutputStream.write(buffer, 0, byteread);
}
fileOutputStream.close();
} 

4. 网络文件获取到服务器后,经服务器处理后响应给前端

/**
* @param netAddress
* @param filename
* @param isOnLine
* @param response
* @功能描述 网络文件获取到服务器后,经服务器处理后响应给前端
*/
@RequestMapping("/netDownLoadNet")
public void netDownLoadNet(String netAddress, String filename, boolean isOnLine, HttpServletResponse response) throws Exception {URL url = new URL(netAddress);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();response.reset();
response.setContentType(conn.getContentType());
if (isOnLine) {
// 在线打开方式 文件名应该编码成UTF-8
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(filename, "UTF-8"));
} else {
//纯下载方式 文件名应该编码成UTF-8
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
}byte[] buffer = new byte[1024];
int len;
OutputStream outputStream = response.getOutputStream();
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
} 
http://www.dinnco.com/news/3836.html

相关文章:

  • 自己建网站做外贸扬州网络优化推广
  • 政府网站模板phpseo云优化方法
  • 库尔勒市建设路街道办网站优书网
  • cnu摄影官网青岛官网seo方法
  • 厦门区块链网站开发影视后期培训机构全国排名
  • wordpress企业建站教程 百度 下载app开发自学
  • 高端网页设计欣赏科技感潍坊seo计费
  • 衡阳退休职工做面膜网站广州市运营推广公司
  • 微信网站测试怎么做外链
  • 手机网站dedecms网站如何推广运营
  • 丹徒网站九江seo
  • 网站设计与开发实训心得深圳seo推广公司
  • 上海市建设协会网站谷歌官方网站注册
  • 湘潭市优化办公司seo是什么级别
  • 供应邯郸网站建设海南网站设计
  • 怎么做网站动态框百度搜索引擎平台
  • 动态网站没有数据库怎么做网页制作软件免费版
  • 十堰网站制作公司电话揭阳百度seo公司
  • 免费crm收费情况湖北网站seo策划
  • 天眼查登录入口seo整站优化推广
  • 做网站muse好还是DW好用赣州网站seo
  • 长沙网站制作app开发公司源码网站
  • 大连设计网站的公司品牌传播方案
  • 创意网站推荐百度竞价推广价格
  • 网上找工程平台有哪些seo交流论坛
  • 网站建设哪家公司好网站建设 公司竞价托管代运营
  • 做网站每个月可以赚多少钱百度推广联盟
  • 最新网站建设哪家快宁波网络推广seo软件
  • 最新中国新闻黑帽seo教程
  • 5网站建设公司网站优化分析