java利用oss实现下载功能

网友投稿 586 2022-12-23


java利用oss实现下载功能

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

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

首先,导入依赖包

com.aliyun.oss

aliyun-sdk-oss

3.6.0

参数类

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, OswmoSwGsParams.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().wrihttp://teJSONObjectFile("hello");

//将hello作为内容存入oss,并获得可以下载的url

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解SpringBoot+Dubbo集成ELK实战
下一篇:SpringBoot redis分布式缓存实现过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~