欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java利用oss實現(xiàn)下載功能

 更新時間:2019年10月31日 09:31:01   作者:汪家人  
這篇文章主要為大家詳細介紹了java利用oss實現(xiàn)下載功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了如何利用oss實現(xiàn)下載功能的具體代碼,供大家參考,具體內(nèi)容如下

目前我接觸的實現(xiàn)下載功能有3種方式。第一種,就是把要下載的內(nèi)容寫到本地目錄,然后把目錄返回給前端,利用a標簽下載。第二種,本地不允許訪問,掛載目錄,使目錄可以對外訪問,同樣的,把目錄返給前端下載。第三種,使用第三方存儲,其中阿里云oss就是一種可以用來實現(xiàn)的對象存儲。

首先,導入依賴包

<dependency>
  <groupId>com.aliyun.oss</groupId>
  <artifactId>aliyun-sdk-oss</artifactId>
  <version>3.6.0</version>
 </dependency>

參數(shù)類

public class OssParams {
 
 public static final String endpoint = "oss-cn-hangzhou.aliyuncs.com"; 
 public static final String accessKeyId = "";
 public static final String accessKeySecret = ""; 
 public static final String bucketName = "";
 
 public static final String rootName = "";//根目錄
}

工具類

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.AppendObjectRequest;
import com.aliyun.oss.model.ObjectMetadata;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
 
import static OssParams.bucketName;
 
/**
 * 先做單例對象調(diào)用,防止多線程并發(fā)bug
 * 后期加入線程鎖控制后,做成公共utils
 */
public class WriteLeadsOssUtils {
 private static Logger LOG = LoggerFactory.getLogger(WriteLeadsOssUtils.class.getName());
 
 private static final String fileSub = ".csv";
 
 private AtomicLong atomicLong = new AtomicLong(0L);
 
 private WriteLeadsOssUtils() {
 }
 
 private static class BuildWriteOSS {
  private static final WriteLeadsOssUtils instance = new WriteLeadsOssUtils();
 }
 
 public static WriteLeadsOssUtils getInstance() {
  return BuildWriteOSS.instance;
 }
 
 private OSS getOssClient() {
  return new OSSClientBuilder().build(OssParams.endpoint, OssParams.accessKeyId, OssParams.accessKeySecret);
 }
 
 public URL writeJSONObjectFile(String content,String fileName) {
  // 創(chuàng)建OSSClient實例。
  OSS ossClient = getOssClient();
  try {
   DateTime currentTime = new DateTime(System.currentTimeMillis());
//   String objectName = OssParams.rootName + currentTime.toString("yyyy-MM-dd-HH") + fileSub;
   String objectName = OssParams.rootName + fileName;
//   AppendObjectRequest appendObjectRequest = null;
   String data = content;
 
   ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
 
   Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 180);
   URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
 
   LOG.info("{} saved to OSS, url={}", objectName,url.toString());
//   for (IngestLeadingRequest param : params) {
//    String jsonStr = JSONObject.toJSONString(param);
//    JSONObject object = JSONObject.parseObject(jsonStr);
//    data += object.toJSONString() + "\n";
//   }
   //文件不存在
//   if (!ossClient.doesObjectExist(OssParams.bucketName, objectName)) {
//    atomicLong.set(0L);
//    appendObjectRequest = getAppendObjectRequest(data, true, objectName);
//    appendObjectRequest.setPosition(0L);
//   } else {
//    appendObjectRequest = getAppendObjectRequest(data, false, objectName);
//   }
//   AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
//   atomicLong.set(appendObjectResult.getNextPosition());
//   System.gc();
   return url;
  } catch (OSSException e) {
   e.printStackTrace();
   return null;
  } catch (ClientException e) {
   e.printStackTrace();
   return null;
  } finally {
   ossClient.shutdown();
  }
 }
 
 
 /**
  * flag標志位,true為新文件,false為追加文件
  *
  * @param data
  * @param flag
  * @param objectName
  * @return
  */
 private AppendObjectRequest getAppendObjectRequest(String data, Boolean flag, String objectName) {
  ObjectMetadata meta = new ObjectMetadata();
  // 指定上傳的內(nèi)容類型。
  meta.setContentType("text/plain;charset=utf-8");
  if (flag == true) {
   return new AppendObjectRequest(bucketName, objectName,
     new ByteArrayInputStream(data.getBytes()), meta);
  } else {
   return new AppendObjectRequest(bucketName, objectName,
     new ByteArrayInputStream(data.getBytes()), meta).withPosition(atomicLong.get());
  }
 }
}

調(diào)用方法

WriteLeadsOssUtils.getInstance().writeJSONObjectFile("hello");
//將hello作為內(nèi)容存入oss,并獲得可以下載的url

利用上述方式,可以直接將可以下載的url返回給前端,直接用窗口打開就可以下載。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)黃金分割法的示例代碼

    Java實現(xiàn)黃金分割法的示例代碼

    黃金分割法是一種區(qū)間收縮方法。所謂區(qū)間收縮方法,指的是將含有最優(yōu)解的區(qū)間逐步縮小,直至區(qū)間長度為零的方法。本文將用Java實現(xiàn)這一算法,需要的可以參考一下
    2022-03-03
  • SpringSecurity添加圖形驗證碼認證實現(xiàn)

    SpringSecurity添加圖形驗證碼認證實現(xiàn)

    本文主要介紹了SpringSecurity添加圖形驗證碼認證實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • java中的arrays.sort()代碼詳解

    java中的arrays.sort()代碼詳解

    這篇文章主要介紹了Java中的Arrays.sort()代碼詳解,涉及Arrays.sort()簡單示例,策略模式,”super”的使用等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的實現(xiàn)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的實現(xiàn)詳解

    平衡二叉樹又被稱為AVL樹(有別于AVL算法),且具有以下性質(zhì):它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。本文將詳解介紹一下平衡二叉樹的原理與實現(xiàn),需要的可以參考一下
    2022-03-03
  • SpringBoot單元測試使用@Test沒有run方法的解決方案

    SpringBoot單元測試使用@Test沒有run方法的解決方案

    這篇文章主要介紹了SpringBoot單元測試使用@Test沒有run方法的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java屬性文件操作之Properties與ResourceBundle詳解

    Java屬性文件操作之Properties與ResourceBundle詳解

    這篇文章主要介紹了Java屬性文件操作之Properties與ResourceBundle詳解,兩個類都可以讀取屬性文件中以key/value形式存儲的鍵值對,ResourceBundle讀取屬性文件時操作相對簡單,需要的朋友可以參考下
    2023-11-11
  • 詳解Java多線程編程中LockSupport類的線程阻塞用法

    詳解Java多線程編程中LockSupport類的線程阻塞用法

    LockSupport類提供了park()和unpark()兩個方法來實現(xiàn)線程的阻塞和喚醒,下面我們就來詳解Java多線程編程中LockSupport類的線程阻塞用法:
    2016-07-07
  • java解析Excel文件的方法實例詳解

    java解析Excel文件的方法實例詳解

    在日常工作中,我們常常會進行文件讀寫操作,除去我們最常用的純文本文件讀寫,更多時候我們需要對Excel中的數(shù)據(jù)進行讀取操作,下面這篇文章主要給大家介紹了關(guān)于java解析Excel文件的方法,需要的朋友可以參考下
    2022-06-06
  • java對象和json的來回轉(zhuǎn)換知識點總結(jié)

    java對象和json的來回轉(zhuǎn)換知識點總結(jié)

    在本篇文章里小編給大家分享了一篇關(guān)于java對象和json的來回轉(zhuǎn)換知識點總結(jié)內(nèi)容,有興趣的朋友們可以學習下。
    2021-01-01
  • 如何實現(xiàn)自己的spring boot starter

    如何實現(xiàn)自己的spring boot starter

    這篇文章主要介紹了如何實現(xiàn)自己的spring boot starter,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論