通过阿里OSS文件服务返回的URL获取文件流下载
我们都知道将文件上传到阿里的OSS文件服务上后,可以通过generatePresignedUrl(bucketName, key, expiration)方法获取该文件的防问路径,但是当我们知道该文件的访问路径该如何通过路径获取该文件的下载流呢?
1、截取文件访问路径,只要该文件的名称。
2、通过阿里API提供的getObject方法获取文件信息
@GetMapping("/downLoadImage")
public void downLoadImage(String fileName, HttpServletResponse response) {
if (StringUtils.isNotBlank(fileName)) {
OSSObject ossObject = downLoadImage(fileName);
if (ossObject != null) {
InputStream inputStream = ossObject.getObjectContent();
int buffer = 1024 * 10;
byte data[] = new byte[buffer];
try {
response.setContentType("application/octet-stream");
// 文件名可以任意指定
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//将文件名转为ASCLL编码
int read;
while ((read = inputStream.read(data)) != -1) {
response.getOutputStream().write(data, 0, read);
}
response.getOutputStream().flush();
response.getOutputStream().close();
ossObject.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} public OSSObject downLoadImage(String fileName) { OSSClient ossClient = getInstance();
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName, HttpMethod.GET);
// 设置过期时间。
request.setExpiration(expiration);
// 生成签名URL(HTTP GET请求)。
URL signedUrl = ossClient.generatePresignedUrl(request);
// 使用签名URL发送请求。
Map<String, String> customHeaders = new HashMap<String, String>();
// 添加GetObject请求头。
//customHeaders.put("Range", "bytes=100-1000");
OSSObject object = ossClient.getObject(signedUrl, customHeaders);
return object;
} public static synchronized OSSClient getInstance() {
OSSClient ossClient = connInstances.get("oss");
if (ossClient == null) {
synchronized (FileUploadServiceImpl.class) {
if (ossClient == null) {
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}
}
return ossClient;
}
通过阿里OSS文件服务返回的URL获取文件流下载的更多相关文章
- C#开发BIMFACE系列7 服务端API之获取文件信息列表
系列目录 [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...
- C#开发BIMFACE系列8 服务端API之获取文件上传状态信息
系列目录 [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...
- C#开发BIMFACE系列6 服务端API之获取文件信息
在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...
- fileReader对象读取txt文件乱码问题 以及如何获取文件的url路径(绝对路径)
<input type="file" @change="aaa($event)"> <div id="hi">< ...
- C# 根据包含文件的路径和文件的名称的字符串获取文件名称的几种方法
C# 截取带路径的文件名字,扩展名,等等 的几种方法 C#对磁盘IO操作的时候,经常会用到这些,路径,文件,文件名字,文件扩展名. 之前,经常用切割字符串来实现, 可是经常会弄错. 尤其是启始位置,多 ...
- C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!
https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...
- Android根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...
- android--------根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等. 如图: public class MainActivity extends Act ...
- JavaSE 文件递归之删除&获取文件夹文件夹中全部的以.jpg的文件的绝对路径
1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; impor ...
随机推荐
- 6-3-2绕过appium的iOS测试
WDA自带的inspector 1.启动WDA Xcode启动:product-test,适合个人调试 命令行启动:适合持续集成 UDID=$(idevice_id -l) xcodebuild -p ...
- Missing Number @leetcode
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- 【Linux_Unix系统编程】chapter5 深入探究文件IO
Chapter5 深入探究文件I/O 本章节将介绍另一个与文件操作相关的系统调用:多用途的fcntl(),并展示其应用之一读取和设置打开文件的状态标志. 5.1 原子操作和竞争条件 所有系统调用都是以 ...
- IO模式调查利器blkiomon介绍
本文链接地址: IO模式调查利器blkiomon介绍 blkiomon 是blktrace工具包带的一个方便用户了解IO情况的工具, 由于blktrace太专业,需要了解的IO协议栈的东西太多,blk ...
- MySQL 查看执行的SQL记录
我们时常会有查看MySQL服务端执行的SQL记录.在MySQL5.1之后提供了支持,通过在启动时加入-l 或者--log选项即可: mysqld -l mysqld --log 在后面的版本(5.1. ...
- 并发基础(三) java线程优先级
在不同的JVM中(JVM也算是一个操作系统),有着不同的CPU调度算法,对于大部分的JVM来说,优先级也是调度算法中的一个参数.所以,线程优先级在一定程度上,对线程的调度执行顺序有所影响,但不能用 ...
- python面向对象重新梳理
关于本篇博文: 面向对象中所有的内容的重新梳理,其实面向对象的知识早在一个多月前就学习过并整理过,但是发现还是有所欠缺,故在此以极其简介的语言风格重新梳理一遍 面向对象详细介绍:http://www. ...
- python学习笔记一和PHP的一些对比
python和php一样是 解释性语言 php和php一样 定义变量不需要指定类型,C语言中的print函数 在python中也是适用的 python编码 适用缩进 4个空格,通常存储为UTF-8模 ...
- leetcode235
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- 1.HTML编码解码URL替换--代码整理
public class HtmlCode { public static String encode(String str){ String s = ""; if (str.le ...