java后台简单从腾讯云下载文件通知前端以附件的形式保存
腾讯云对象存储和阿里云差不多
这是我的配置
/**
* 腾讯云client
* @return COSClient
*/
public static COSClient getCOSClient() {
long appId = 00000;
String secretId = "";
String secretKey = "";
// 1 初始化身份信息
COSCredentials cred = new BasicCOSCredentials(appId , secretId, secretKey);
// 2 设置 Bucket 的区域, XML的区域详细信息请参见 可用地域(https://www.qcloud.com/document/product/436/6224) 文档
ClientConfig clientConfig = new ClientConfig(new Region("cos.na-toronto"));
// 3 生成 cos 客户端
return new COSClient(cred, clientConfig);
}
下载代码
@Autowired
private COSClient cosClient; @Override
public MessageVo getDownLoadFile(String fileName, String cosKey, HttpServletResponse response, HttpServletRequest request) {
MessageVo messageVo = MessageVoUtil.getMessageVo();
try { // 从腾讯云下载文件
GetObjectRequest getObjectRequest = new GetObjectRequest(ManageStaticParam.COSCLIENT_BUCKET_TEST, "/yu/"+cosKey);//bucketName需要自己设置
COSObject cosObject = cosClient.getObject(getObjectRequest);
// 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
BufferedReader reader = new BufferedReader(new InputStreamReader(cosObject .getObjectContent()));
COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
// 缓冲文件输出流
BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
// 通知浏览器以附件形式下载
// response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")); response.setContentType("application/doc");
final String userAgent = request.getHeader("USER-AGENT");
if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
fileName = URLEncoder.encode(fileName,"UTF-8");
}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
fileName = new String(fileName.getBytes(), "ISO8859-1");
}else{
fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
}
response.addHeader("Content-Disposition", "attachment;filename=" +fileName);//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开 // 进行解码
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] car= new byte[];
while (true) {
String line = reader.readLine();
if (line == null) break;
car = base64Decoder.decodeBuffer(line);
outputStream.write(car);
}
reader.close(); // byte[] car = new byte[1024];
// int L;
//
// while((L = cosObjectInput.read(car)) != -1){
// System.out.println(car+"=========="+car.length);
// if (car.length!=0){
// outputStream.write(car, 0,L);
// }
// }
outputStream.flush();
outputStream.close();
messageVo.setCode(ReturnCodeEnum.处理成功.getStatenum());
return messageVo;
} catch (IOException e) {
e.printStackTrace();
messageVo.setCode(ReturnCodeEnum.请求实体不存在.getStatenum());
messageVo.setData(" Backend file write error !!!");
return messageVo;
} catch (CosServiceException e){
messageVo.setCode(ReturnCodeEnum.请求实体不存在.getStatenum());
messageVo.setData(" The request entity does not exist !!!");
return messageVo;
}
}
注意:在实际使用该方法下载的过程中,可能遇到服务器不报错,但就是下载不下来文件的问题,这样有可能是前端页面发出下载请求的方式有误,不能使用AJAX的get方式访问该方法,因为Ajax能够返回的数据格式只能为html,script,json,xml,不接受流的形式。笔者使用的方式是用window.location.href访问,或者使用from表单提交方式(GET/POST)。
腾讯开放平台文档
https://cloud.tencent.com/document/product/436/10199#.E7.AE.80.E5.8D.95.E6.96.87.E4.BB.B6.E4.B8.8A.E4.BC.A0
阿里云下载链接
http://blog.csdn.net/qq_35498405/article/details/77942817
java后台简单从腾讯云下载文件通知前端以附件的形式保存的更多相关文章
- java后台简单从阿里云上传下载文件并通知前端以附件的形式保存
一. 首先开通阿里的OSS 服务 创建一个存储空间在新建一个Bucket 在你新建的bucket有所需的id和key 获取外网访问地址或者是内网 看个人需求 我使用的是外网(内网没用过 估计是部署到阿 ...
- Java Web实现使用浏览器从服务器下载文件(后台)
Java Web实现 使用浏览器从服务器下载文件. 下面实现两种情况的下载,需求如下: 需求(一):1.用户在页面填写表单. 2.填写完成后,选择下载,将表单内容发往后台. 3.后台根据内容生产一个文 ...
- redisTemplate实现轻量级消息队列, 异步处理excel并实现腾讯云cos文件上传下载
背景 公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没 ...
- 【JAVA】通过HttpURLConnection 上传和下载文件(二)
HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器 上传代码如下: package com.util; import java.i ...
- 在开发框架中使用FTP辅助类上传或者下载文件,方便管理附件内容
在有些系统应用里面,我们需要对应用服务器.数据库服务器.文件服务器进行分开,文件路径等信息存储在数据库服务器里面,但文件内容则存储在文件服务器里面,通过使用FTP进行文件的上传下载,从而实现更加高效的 ...
- [腾讯云]简单在腾讯云 CenTOS7.0 安装Nginx,Mysql(MariaDB),Memcache,解析PHP!
1.安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等. yum install epel-release 2.安装Nginx a) yum install n ...
- java后台服务器向Nodejs客户端发送压缩包文件
java代码: Map map=new HashMap(); try { //获取本地文件转换成字符换 File file = new File(apppath);//"D:/upload/ ...
- Java使用SFTP协议上传、下载文件
http://blog.csdn.net/haidage/article/details/6859716 在自己尝试之后发现以上内容里有坑. 1.关闭连接的时候,必须要sftp.getSession( ...
- python下载腾讯云慢日志并发送邮件附件
这里没优化,只是对腾讯云下载慢日志,然后通过邮件发送出去 #!/usr/bin/env python # encoding: utf-8 import json import smtplib impo ...
随机推荐
- [leetcode]253. Meeting Rooms II 会议室II
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- 优化 resolv.conf
DNS lookup 在把域名解析成 IP 过程中耽误了不少时间,尤其是访问比较复杂的网站的时候,比如某个页面包含多个 url,一次请求需要做多次 DNS 解析,并且从用户浏览器到 DNS serve ...
- Ubuntu解决sudo: source: command not found错误
Ubuntu Server上执行以下命令,可以看到默认打开的文件数限制为1024个. $ ulimit -n 1024 编辑/etc/profile配置文件,在最后添加一行: ulimit -SHn ...
- PHP中SQL查询语句的id=%d解释
在SQL语句中有一些写的是这样的: 'SELECT id FROM dbname WHERE xx_id = %d;', $bl['student_id'] 其中的“xx_id = %d”,这里的%d ...
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
- 关于使用 ps脚本来处理图片的排层问题
问题是这样,在三维软件 把模型切割,给切割的部件排上序号 如 :tianji_1-431_bujian13.png 中间一段数据就是表示的 1.431 该数据之后 会到ps总排层使用 在ps排层出三维 ...
- Linux的磁盘分区(一)
磁道:track 扇区:sector 磁头:head 柱面:cylinder 每个扇区,512字节 每个磁道划分为63个扇区 逻辑磁头(盘面)数设为255 一个柱面的大小 =255 * 63 * 51 ...
- 如何使用Word2016或Office365中的word撰写博客并发布
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- java 文件中 定义一个字符串,它的默认编码是什么?
.java 文件的编码就是 String 字符串的编码 File 文件的编码就是 文件内容的编码 request 的设置的编码就是inputstream 的编码 jvm 的默认编码(the defau ...
- Linux系统的运行级的概念
Linux OS 将操作 环境分为以下7个等级,即 0:关机 1:单用户模式(单用户.无网络) 2:无网络支持的多用户模式(多用户.无网络) 3:有网络支持的多用户模式(多用户.有网络) 4:保留,未 ...