package cn.com.ty.lift.common.utils; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import com.aliyun.oss.model.PutObjectRequest; import java.io.*; /** * @author wcz * @date 2019/11/29 * @description aliyun OSS工具类 */ public class AliyunOSSUtil { // Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-beijing.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "LTAI4FkSqFZa6LH9HqAsVott"; String accessKeySecret = "w7GXuh5tf1hduQuZ2AzT3a4q14BI1i"; public static void main(String[] args) { File file = new File("D:\\mybatis.jpg"); String filename = file.getName(); String suffix = filename.substring(filename.indexOf(".")); System.out.println("filename: " + filename); System.out.println("suffix: " + suffix); AliyunOSSUtil util = AliyunOSSUtil.me(); util.putFile("temp15827479607","2019/12/03/"+System.currentTimeMillis() + suffix,file); byte[] content = "ceshi".getBytes(); util.putObject("temp15827479607",content,"测试存储"); } public AliyunOSSUtil() { } public AliyunOSSUtil(String endpoint, String accessKeyId, String accessKeySecret) { this.endpoint = endpoint; this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; } public static AliyunOSSUtil me(){ return new AliyunOSSUtil(); } public static AliyunOSSUtil me(String endpoint,String accessKeyId, String accessKeySecret){ return new AliyunOSSUtil(endpoint,accessKeyId,accessKeySecret); } /** * @param * @return * @description 创建存储空间 * 存储空间是OSS全局命名空间,相当于数据的容器,可以存储若干文件。 以下代码用于新建一个存储空间 * @date 2019/11/29 10:30 */ public void createBucket(String bucketName) { // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 创建存储空间。 ossClient.createBucket(bucketName); // 关闭OSSClient。 ossClient.shutdown(); } /** * @param * @return * @description 上传文件,上传文件至OSS * @date 2019/11/29 10:31 */ public boolean putObject(String bucketName,byte[] content,String objectName) { // 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(objectName)。 ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content)); return true; }catch (Exception e){ e.printStackTrace(); return false; }finally { if(null != ossClient){ // 关闭OSSClient。 ossClient.shutdown(); } } } /** * @param * @return * @description 下载文件,获取文件的文本内容 * @date 2019/11/29 10:32 */ public void getObject(String bucketName,String objectName) throws Exception { // 从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。 OSSObject ossObject = ossClient.getObject(bucketName, objectName); // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。 InputStream content = ossObject.getObjectContent(); if (content != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(content)); while (true) { String line = reader.readLine(); if (line == null) break; System.out.println("\n" + line); } // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。 content.close(); } // 关闭OSSClient。 ossClient.shutdown(); } /** * @param * @return * @description 列举文件:列举指定存储空间下的文件。默认列举100个文件 * @date 2019/11/29 10:38 */ public void listObjects(String bucketName) { // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。 ObjectListing objectListing = ossClient.listObjects(bucketName); // objectListing.getObjectSummaries获取所有文件的描述信息。 for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")"); } // 关闭OSSClient。 ossClient.shutdown(); } /** * @description 删除文件 * @date 2019/11/29 10:44 * @param * @return */ public boolean deleteObject(String bucketName,String objectName){ // 表示删除OSS文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 删除文件。 ossClient.deleteObject(bucketName, objectName); return true; }catch (Exception e){ e.printStackTrace(); return false; }finally { // 关闭OSSClient。 if(null != ossClient){ ossClient.shutdown(); } } } public void putFile(String bucketName,String objectName,File file){ // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 创建PutObjectRequest对象。 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file); // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件。 ossClient.putObject(putObjectRequest); // 关闭OSSClient。 ossClient.shutdown(); } public String getObjectUrl(String bucketName,String objectName){ String base = endpoint.replace("//","//" + bucketName + "."); String url = base + "/" + objectName; return url; } }