java利用oss实现下载功能

本文实例为大家分享了如何利用oss实现下载功能的具体代码,供大家参考,具体内容如下

目前我接触的实现下载功能有3种方式。第一种,就是把要下载的内容写到本地目录,然后把目录返回给前端,利用a标签下载。第二种,本地不允许访问,挂载目录,使目录可以对外访问,同样的,把目录返给前端下载。第三种,使用第三方存储,其中阿里云oss就是一种可以用来实现的对象存储。

首先,导入依赖包

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

参数类

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;

/**
 * 先做单例对象调用,防止多线程并发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) {
  // 创建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();
  // 指定上传的内容类型。
  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());
  }
 }
}

调用方法

WriteLeadsOssUtils.getInstance().writeJSONObjectFile("hello");
//将hello作为内容存入oss,并获得可以下载的url

利用上述方式,可以直接将可以下载的url返回给前端,直接用窗口打开就可以下载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java OSS批量下载并压缩为ZIP代码实例

    这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /** * 批量下载为zip * @param req * @param response * @param keyList oss文件路径集合 * @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip */ public static void downForZip(HttpServlet

  • Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例

    之前从没接触过Yii,借助的各方资源来做的这个整合阿里云OSS的SDK上传图片实例,如果有不正之处请指出! 前面参照了weinirumo 的介绍,大家可以自行去查看. 好了,下面开始进入主题: 准备工作:需要使用composer执行命令,如果没有安装composer的需要提前安装,参考文档:composer安装流程 1.项目目录结构 我使用的是基础版,只有后台目录,请自行对照自己的项目目录结构,会用到以下的几个目录: 2.在项目根目录下运行cmd命令 3.执行composer命令 切换到中国国内

  • java利用oss实现下载功能

    本文实例为大家分享了如何利用oss实现下载功能的具体代码,供大家参考,具体内容如下 目前我接触的实现下载功能有3种方式.第一种,就是把要下载的内容写到本地目录,然后把目录返回给前端,利用a标签下载.第二种,本地不允许访问,挂载目录,使目录可以对外访问,同样的,把目录返给前端下载.第三种,使用第三方存储,其中阿里云oss就是一种可以用来实现的对象存储. 首先,导入依赖包 <dependency> <groupId>com.aliyun.oss</groupId> <

  • CentOS利用Nginx搭建下载功能服务器

    利用nginx在服务器搭建下载功能, 安装Nginx,pcre mkdir /usr/local/nginx tar zxvf pcre-8.12.tar.gz cd pcre-8.12 ./configure --prefix=/usr/local/pcre make && make install tar zxvf nginx-1.0.12.tar.gz tar zxvf nginx-1.0.12.tar.gz cd nginx-1.0.12 ./configure --prefix=

  • java实现文件断点续传下载功能

    本文实例为大家分享了java断点续传下载的代码,供大家参考,具体内容如下 1. Java代码     //实现文件下载功能 public String downloadFile(){ File dir = new File(filepath);//获取文件路劲 if(!dir.exists()) { System.out.println("文件路径错误"); log.debug("文件路径错误"); return "failed";// 判断文件

  • java文件上传下载功能实现代码

    本文实例为大家分享了文件上传下载java实现代码,供大家参考,具体内容如下 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型:     默认类型:enctype="application/x-www-form-urlencoded"     文件上传类型:multipart/form-data FileUpload 文件上传功能开发中比较常用,apache也提供了文件上传组

  • 基于Java文件输入输出流实现文件上传下载功能

    本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下 前端通过form表单的enctype属性,将数据传递方式修改为二进制"流"的形式,服务端(servlet)通过  getInputStream() 获取流信息, 运用java I/O 流的基础操作将流写入到一个服务端临时创建的文件temp中,然后再次利用文件基本操作,读取并截取临时文件内容,根据其中信息创建相应的文件,将读取出来的具体信息写入,下载时,根据提交的文件名称,找到服务器端相应的文件,然后根据输

  • java实现上传文件到oss(阿里云)功能示例

    本文实例讲述了java实现上传文件到oss(阿里云)功能.分享给大家供大家参考,具体如下: 做这个功能之前我们需要导入阿里云OSS官方提供的工具包 aliyun-sdk-oss-2.5.0.jar 这个文件 如果有最新版的话就下载最新版 aliyun.upload.AliyunConfig package aliyun.upload; public final class AliyunConfig { //你的oss所在域,要加http:// 不明白可以对照你的文件引用地址 public sta

  • Java利用Phantomjs实现生成图片的功能

    今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 首先,什么是PhantomJS? 根据官网介绍: PhantomJS is a command-line tool. -- 其实就是一个命令行工具. PhantomJS的下载地址: Windows:phantomjs-2.1.1-windows.zip Linux:phantomjs-2.1.1-linux-x86_64.tar.bz2;phantomjs-2.1.1

  • Java实现断点下载功能的示例代码

    目录 介绍 效果 前端代码 后端代码 介绍 当下载一个很大的文件时,如果下载到一半暂停,如果继续下载呢?断点下载就是解决这个问题的. 具体原理: 利用indexedDb,将下载的数据存储到用户的本地中,这样用户就算是关电脑那么下次下载还是从上次的位置开始的 先去看看本地缓存中是否存在这个文件的分片数据,如果存在那么就接着上一个分片继续下载(起始位置) 下载前先去后端拿文件的大小,然后计算分多少次下载(n/(1024*1024*10)) (结束位置) 每次下载的数据放入一个Blob中,然后存储到本

  • java利用easyexcel实现导入与导出功能

    目录 前言 1先添加依赖 2批量插入数据 3创建需要导出数据实体类 4创建一个类ExcelListener 5实现下载excel 6控制器添加我们的导入操作代码 7导出效果如图 8导入直接调用 前言 poi的解析方式是dom解析,把结果一次都读入内存操作,这样的操作平时是不会有问题的,但是并发量上来的时候就会出现OOM,EasyExcel,底层对象其实还是使用poi包的那一套.它只是将poi包的一部分抽了出来,摒弃掉了大部分业务相关的属性.由于它关注的业务是导入导出这一块,所以在处理大数据量的导

  • Java操作FTP实现上传下载功能

    目录 FTP简介 FTP架构 FTP数据连接模式 用户认证 客户端 Vsftp安装与配置 启动服务 配置文件说明 传输模式配置 系统用户配置 java操作ftp文件服务器 1.引入依赖 2.提供接口 3.对提供操作ftp接口进行实现 4.配置ftp相关参数 5.写测试controller FTP简介 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层,TCP 模型的第四层, 即应用层, 使用 TCP 传输而

随机推荐