我们都知道将文件上传到阿里的OSS文件服务上后,可以通过generatePresignedUrl(bucketName, key, expiration)方法获取该文件的防问路径,但是当我们知道该文件的访问路径该如何通过路径获取该文件的下载流呢?

  1、截取文件访问路径,只要该文件的名称。

  2、通过阿里API提供的getObject方法获取文件信息

  1. @GetMapping("/downLoadImage")
  2. public void downLoadImage(String fileName, HttpServletResponse response) {
  3. if (StringUtils.isNotBlank(fileName)) {
  4. OSSObject ossObject = downLoadImage(fileName);
  5. if (ossObject != null) {
  6. InputStream inputStream = ossObject.getObjectContent();
  7. int buffer = 1024 * 10;
  8. byte data[] = new byte[buffer];
  9. try {
  10. response.setContentType("application/octet-stream");
  11. // 文件名可以任意指定
  12. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//将文件名转为ASCLL编码
  13. int read;
  14. while ((read = inputStream.read(data)) != -1) {
  15. response.getOutputStream().write(data, 0, read);
  16. }
  17. response.getOutputStream().flush();
  18. response.getOutputStream().close();
  19. ossObject.close();
  20. } catch (UnsupportedEncodingException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. } catch (IOException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  29. }
  30.  
  31. public OSSObject downLoadImage(String fileName) {
  32.  
  33. OSSClient ossClient = getInstance();
  34. Date expiration = new Date(new Date().getTime() + 3600 * 1000);
  35. GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName, HttpMethod.GET);
  36. // 设置过期时间。
  37. request.setExpiration(expiration);
  38. // 生成签名URL(HTTP GET请求)。
  39. URL signedUrl = ossClient.generatePresignedUrl(request);
  40. // 使用签名URL发送请求。
  41. Map<String, String> customHeaders = new HashMap<String, String>();
  42. // 添加GetObject请求头。
  43. //customHeaders.put("Range", "bytes=100-1000");
  44. OSSObject object = ossClient.getObject(signedUrl, customHeaders);
  45. return object;
  46. }
  47.  
  48. public static synchronized OSSClient getInstance() {
  49. OSSClient ossClient = connInstances.get("oss");
  50. if (ossClient == null) {
  51. synchronized (FileUploadServiceImpl.class) {
  52. if (ossClient == null) {
  53. ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  54. }
  55. }
  56. }
  57. return ossClient;
  58. }

通过阿里OSS文件服务返回的URL获取文件流下载的更多相关文章

  1. C#开发BIMFACE系列7 服务端API之获取文件信息列表

    系列目录     [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...

  2. C#开发BIMFACE系列8 服务端API之获取文件上传状态信息

    系列目录     [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...

  3. C#开发BIMFACE系列6 服务端API之获取文件信息

    在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...

  4. fileReader对象读取txt文件乱码问题 以及如何获取文件的url路径(绝对路径)

    <input type="file" @change="aaa($event)"> <div id="hi">< ...

  5. C# 根据包含文件的路径和文件的名称的字符串获取文件名称的几种方法

    C# 截取带路径的文件名字,扩展名,等等 的几种方法 C#对磁盘IO操作的时候,经常会用到这些,路径,文件,文件名字,文件扩展名. 之前,经常用切割字符串来实现, 可是经常会弄错. 尤其是启始位置,多 ...

  6. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

  7. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  8. android--------根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等. 如图: public class MainActivity extends Act ...

  9. JavaSE 文件递归之删除&amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

    1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; impor ...

随机推荐

  1. 杂项-ORM:LinqToSQL

    ylbtech-杂项-ORM:LinqToSQL LINQ TO SQL 是包含在.NET Framework 3.5 版中的一种 O/RM 组件(对象关系映射),O/RM 允许你使用 .NET 的类 ...

  2. MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)解决方案详细说明

    1.首先这个问题出现的原因不详,可能是mysql的bug吧   2 解决步骤      1.首先停下mysql的服务  作者系统下命令为   /etc/init.d/mysqld stop  具体的停 ...

  3. linux下一个网卡配置多个ip【虚拟ip】

    Linux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配置多个ip.什么场合增加ip别名能派上用场?布网需要.多ip访问测试.特定软件对多ip的需要...and so on. ...

  4. ROS-PCQ基于IP的限速(总带宽上下行5M)

    /ip firewall mangle add chain=forward src-address=192.168.0.0/16 \ action=mark-connection new-connec ...

  5. 小朋友学C语言(7)

    数组 一.数组简介 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比 ...

  6. PCIe Max_Payload_Size 和 Max_Read_Request_Size

    最近PCIe在SSDFans上镜率挺高,那我们来聊两句MAX_READ_REQUEST_SIZE 和MAX_PAYLOAD_SIZE. 这两个东西都在PCIe Capability Structure ...

  7. js判断当前为pc端还是wap端

    var checkBrowser; function browserRedirect() { var sUserAgent = navigator.userAgent.toLowerCase(); v ...

  8. git 隐藏文件删除

    1.首先切换到当前目录 cd /Users/wlm/Desktop/XXX/XXX 2.执行下面的命令: defaults write com.apple.finder AppleShowAllFil ...

  9. VC字符串转换常用函数

    最近在做一些关于VC的ActiveX小插件,经常会遇到字符串处理的问题,狂查CSDN和MSDN,结果并不理想.先说明一下,相关处理函数在VC++6.00测试通过.也许很多人不能理解,现在都什么年代了, ...

  10. PyQt5系列教程(七)控件

    软硬件环境 Windows 10 Python 3.4.2 PyQt 5.5.1 PyCharm 5.0.4 前言 控件是PyQt应用程序的基石.PyQt5自带很多不同的控件,包括像button.ch ...