• Java调用阿里云OSS下载文件


    参考:https://blog.csdn.net/haiyanghan/article/details/106771047

    阿里云官方指导:https://help.aliyun.com/document_detail/84822.html

    1、准备工作

      具体细节参考https://blog.csdn.net/haiyanghan/article/details/106771047

    2、项目需求

      我这里只需要根据文件名称把文件从oss下载下来即可,参考阿里云官网指导:https://help.aliyun.com/document_detail/84822.html

      首先需要引入阿里云的依赖包,如下所示:

    1 <!--阿里云oss -->
    2 <dependency>
    3     <groupId>com.aliyun.oss</groupId>
    4     <artifactId>aliyun-sdk-oss</artifactId>
    5     <version>3.10.2</version>
    6 </dependency>

      如果只是想将oss文件下载到服务器的磁盘里面,可以使用下面的案例。需要注意的就是OSS的文件目录下面的文件,指定下载路径的时候一定要写正常,不然会报NoSuchKey的异常信息。

     1 package com.controller;
     2 
     3 import java.io.File;
     4 
     5 import org.slf4j.Logger;
     6 import org.slf4j.LoggerFactory;
     7 import org.springframework.beans.factory.annotation.Value;
     8 import org.springframework.stereotype.Controller;
     9 import org.springframework.web.bind.annotation.RequestMapping;
    10 import org.springframework.web.bind.annotation.ResponseBody;
    11 
    12 import com.aliyun.oss.OSS;
    13 import com.aliyun.oss.OSSClientBuilder;
    14 import com.aliyun.oss.model.GetObjectRequest;
    15 import com.aliyun.oss.model.OSSObject;
    16 
    17 @Controller
    18 @RequestMapping(value = "/oss")
    19 public class ServiceMattersOSSController {
    20 
    21     // 日志记录器
    22     private static final Logger logger = LoggerFactory.getLogger(ServiceMattersOSSController.class);
    23 
    24     // 地域节点
    25     @Value("${aliyun.oss.file.endpoint}")
    26     private String endpoint;
    27 
    28     // 创建accesskey生成的keyid
    29     @Value("${aliyun.oss.file.keyid}")
    30     private String accessKeyId;
    31 
    32     // 创建accesskey生成的secret
    33     @Value("${aliyun.oss.file.keysecret}")
    34     private String accessKeySecret;
    35 
    36     // 创建bucket时输入的名称
    37     @Value("${aliyun.oss.file.bucketname}")
    38     private String bucketName;
    39 
    40     // 阿里云OSS规范,Object绝对路径名前面不需要加斜杠
    41     @Value("${aliyun.oss.file.folder}")
    42     private String folder;
    43 
    44     /**
    45      * 下载文件到本地路径
    46      * 
    47      * fwsx库的clwj字段取字段。
    48      * 
    49      * @param fileName
    50      */
    51     @RequestMapping(value = "/downOSSFileLocal")
    52     @ResponseBody
    53     public void downOSSFileLocal(String fileName) {
    54      // 创建OSSClient实例
    56         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    57
    59         OSSObject object = ossClient.getObject(bucketName, folder + fileName);63         // 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
    64         // 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
    65         ossClient.getObject(new GetObjectRequest(bucketName, folder + fileName),
    66                 new File("/data/apache/apache-tomcat-9.0.36/webapps/" + fileName));
    67         // 关闭OSSClient。
    68         ossClient.shutdown();70     }
    71 
    72 }

      如果只是想将oss文件响应给前端浏览器,可以使用下面的案例。

      1 package com.controller;
      2 
      3 import java.io.BufferedInputStream;
      4 import java.io.File;
      5 import java.io.IOException;
      6 import java.io.OutputStream;
      7 
      8 import javax.servlet.http.HttpServletResponse;
      9 
     10 import org.slf4j.Logger;
     11 import org.slf4j.LoggerFactory;
     12 import org.springframework.beans.factory.annotation.Value;
     13 import org.springframework.stereotype.Controller;
     14 import org.springframework.web.bind.annotation.RequestMapping;
     15 import org.springframework.web.bind.annotation.ResponseBody;
     16 
     17 import com.aliyun.oss.OSS;
     18 import com.aliyun.oss.OSSClientBuilder;
     19 import com.aliyun.oss.model.GetObjectRequest;
     20 import com.aliyun.oss.model.OSSObject;
     21 
     22 @Controller
     23 @RequestMapping(value = "/oss")
     24 public class ServiceMattersOSSController {
     25 
     26     // 日志记录器
     27     private static final Logger logger = LoggerFactory.getLogger(ServiceMattersOSSController.class);
     28 
     29     // 地域节点
     30     @Value("${aliyun.oss.file.endpoint}")
     31     private String endpoint;
     32 
     33     // 创建accesskey生成的keyid
     34     @Value("${aliyun.oss.file.keyid}")
     35     private String accessKeyId;
     36 
     37     // 创建accesskey生成的secret
     38     @Value("${aliyun.oss.file.keysecret}")
     39     private String accessKeySecret;
     40 
     41     // 创建bucket时输入的名称
     42     @Value("${aliyun.oss.file.bucketname}")
     43     private String bucketName;
     44 
     45     // 阿里云OSS规范,Object绝对路径名前面不需要加斜杠
     46     @Value("${aliyun.oss.file.folder}")
     47     private String folder;
     48 
     49     /**
     50      * 下载OSS服务器的文件
     51      * 
     52      * @param fileName
     53      * @param response
     54      */
     55     @RequestMapping(value = "/downOSSFile")
     56     @ResponseBody
     57     public void downOSSFile(String fileName, HttpServletResponse response) { 59         BufferedInputStream input = null;
     60         OutputStream outputStream = null;
     61         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 64         OSSObject ossObject = ossClient.getObject(bucketName, folder + fileName); 68         try {
     69             response.reset();
     70             response.setCharacterEncoding("utf-8");
     71             response.setContentType("application/x-msdownload");
     72             response.addHeader("Content-Disposition",
     73                     "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
     74 
     75             input = new BufferedInputStream(ossObject.getObjectContent());
     76             byte[] buffBytes = new byte[1024];
     77             outputStream = response.getOutputStream();
     78             int read = 0;
     79             while ((read = input.read(buffBytes)) != -1) {
     80                 outputStream.write(buffBytes, 0, read);
     81             }
     82             outputStream.flush();
     83             // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
     84             ossObject.close();
     85         } catch (IOException ex) {
     86             ex.printStackTrace();
     87         } finally {
     88             try {
     89                 if (outputStream != null) {
     90                     outputStream.close();
     91                 }
     92                 if (input != null) {
     93                     input.close();
     94                 }
     95             } catch (IOException e) {
     96                 e.printStackTrace();
     97             }
     98         }
     99         ossClient.shutdown();101     }
    102 
    103 
    104 }
  • 相关阅读:
    一个项目多个App项目搭建
    mac 配置sencha touch环境
    mac 配置pylucene
    django博客开发
    xampp添加 django支持
    mac安装apache的mod_wsgi模块
    修改xampp默认sql密码
    xampp 安装 mysql-python
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    MySQL问题解决:-bash:mysql:command not found
  • 原文地址:https://www.cnblogs.com/biehongli/p/15484430.html
Copyright © 2020-2023  润新知