您的位置:首页 > 编程语言 > Java开发

java利用oss实现下载功能

2020-03-11 17:50 597 查看

本文实例为大家分享了如何利用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返回给前端,直接用窗口打开就可以下载。

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java oss 下载