文件上传至阿里云之OssUtil工具类的使用

什么是Oss?

阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。

简单来说,Oss支持任意类型的文件远程存储(文件类型包括但不仅限于图片,视频,文字),可以通过网络上传或下载分享,有着高性能,安全,稳定的特性。

更多Oss介绍参考此篇文章:点我

通过OssBroswer初识Oss

假设你已经学习过Oss相关知识,并且已拥有了Oss账号及存储空间。请先下载OssBroswer,以便后续的开发调试。

官网下载地址:点我获取下载地址

下载并安装完毕后,打开软件,输入对应的AK与AKS。

登陆成功可以看到已建的bucket(桶),后面的上传请上传至对应的bucket中即可。

Bucket下可以创建多个文件夹,可按照个人的分类习惯放入文件。

OssUtil的使用

网上工具类可以找到很多,大家百度就可以找到,这里我提供一个,该工具类有两个方法,第一个方法用来上传文件至阿里云,第二个方法用来获取指定路径下某个文件的访问路径(或下载路径),第三个方法用来删除Oss指定路径下的指定文件。

先贴代码。

/**
 * 
 * 上传数据之阿里云oss工具类
 */
@Component
public class OssUtil {
	
	public static final Logger LOGGER = LoggerFactory.getLogger(OssUtil.class);

	/**
	 * 生成访问图片地址有效期
	 */
	private static final int VISIT_URL_EXPIRATION = 365*10;

	/**
	 * uploadFile:上传文件到Oss
	 * @param accesKeyId accesKeyId
	 * @param accessKeySecret accessKeySecret
	 * @param endpoint endpoint
	 * @param savePath 存放路径
	 * @param bucketName bucket名字
	 * @param imageName 图片名字
	 * @param fileInputStream 图片流
	 * @param fileSize fileSize 图片大小
	 * @throws Exception
	 */
	public static void uploadFile(String accesKeyId,String accessKeySecret,String endpoint,String savePath,String bucketName,
			String imageName, InputStream fileInputStream,Long fileSize) throws Exception {
		OSSClient client = new OSSClient(endpoint, accesKeyId, accessKeySecret);
		try {
			ObjectMetadata objectMeta = new ObjectMetadata();
			objectMeta.setContentLength(fileSize);
			if (!savePath.endsWith("/")) {
				savePath = savePath + "/";
			}
			client.putObject(bucketName,savePath + imageName, fileInputStream, objectMeta);
		} catch (Exception e) {
			LOGGER.error("上传文件到oss出错", e);
			throw new Exception("上传文件到oss出错");
		} finally {
			if (fileInputStream != null) {
				try {
					fileInputStream.close();
					client.shutdown();
				} catch (IOException e) {
					LOGGER.error("上传文件到oss出错", e);
				}
			}
		}
	}

   /**
    * 生成原图访问地址
    * @param ossAccessKeyId
    * @param ossAccessKeySecret
    * @param ossEndPoint
    * @param ossBucketName
    * @param imageName
    * @param path
    * @return
    * @throws Exception
    */
   public static String getVisitUrl( String ossAccessKeyId , String ossAccessKeySecret, String ossEndPoint, String ossBucketName, String path, String imageName ) throws Exception{
       OSSClient client = new OSSClient(ossEndPoint, ossAccessKeyId, ossAccessKeySecret);
       try {
           Calendar calendar = Calendar.getInstance();
           calendar.add(Calendar.DAY_OF_YEAR, VISIT_URL_EXPIRATION);
           return client.generatePresignedUrl(ossBucketName, path + "/" + imageName, calendar.getTime()).toString();
       } catch (Exception e) {
           throw new Exception("生成访问地址出错");
       }finally {
           client.shutdown();
       }
   }
	
	   /**
    * 删除Oss源文件
    * @param ossAccessKeyId
    * @param ossAccessKeySecret
    * @param ossEndPoint
    * @param ossBucketName
    * @param savePath
    * @param bucketName
	* @param imageName
    */
    public static void delete(String accesKeyId,String accessKeySecret,String endpoint,String savePath,String bucketName,
			String imageName) throws Exception {
    	OSSClient client = new OSSClient(endpoint, accesKeyId, accessKeySecret);
		try {
			if (!savePath.endsWith("/")) {
				savePath = savePath + "/";
			}
			client.deleteObject(bucketName, savePath+ imageName);
		} catch (Exception e) {
			LOGGER.error("删除oss文件出错", e);
			throw new Exception("删除oss文件出错");
		} finally {
					client.shutdown();
		}
    }

}

本文旨在简单介绍工具类的使用,不对上传整个流程作声明,后续文章会发上传插件的使用。

观察这三个方法所需参数,可以看出,有以下参数是必须的:

  1. accesKeyId
  2. accessKeySecret
  3. endpoint
  4. savePath
  5. bucketName
  6. imageName

注意一下,savePath写对应桶下文件夹的名字或路径即可(不包含桶名)

附:工具类下载地址

 

 

这里提供一个 Java 版本的阿里云 OSS 工具类,方便上传、下载、删除等操作。 ```java import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.URL; import java.util.Date; import java.util.List; /** * 阿里云 OSS 工具类 */ public class AliyunOSSUtil { private static final Logger LOGGER = LoggerFactory.getLogger(AliyunOSSUtil.class); private static OSS ossClient; /** * 初始化 OSS 客户端 * * @param endpoint OSS 服务的 endpoint * @param accessKeyId 访问 OSS 服务的 accessKeyId * @param accessKeySecret 访问 OSS 服务的 accessKeySecret */ public static void initOSSClient(String endpoint, String accessKeyId, String accessKeySecret) { ClientConfiguration config = new ClientConfiguration(); config.setConnectionTimeout(5000); // 设置连接超时时间,默认50000毫秒 config.setMaxErrorRetry(3); // 设置请求失败后最大重试次数,默认3次 ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, config); } /** * 销毁 OSS 客户端 */ public static void destroyOSSClient() { if (ossClient != null) { ossClient.shutdown(); } } /** * 上传文件到 OSS * * @param bucketName OSS bucket 名称 * @param filePath 本地文件路径 * @param objectName OSS 上的文件名称 * @return 文件 URL */ public static String uploadFile(String bucketName, String filePath, String objectName) { try { // 创建 PutObjectRequest 对象 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件 ossClient.putObject(putObjectRequest); // 获取文件 URL Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // 设置 URL 过期时间为 1 小时 URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration); LOGGER.info("Upload file to OSS success, object name: {}, URL: {}", objectName, url); return url.toString(); } catch (Exception e) { LOGGER.error("Upload file to OSS failed, object name: {}", objectName, e); return null; } } /** * 下载 OSS 上的文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 * @param localPath 本地存储路径 */ public static void downloadFile(String bucketName, String objectName, String localPath) { try { // 下载文件 OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); OutputStream outputStream = new FileOutputStream(localPath); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.close(); inputStream.close(); LOGGER.info("Download file from OSS success, object name: {}, local path: {}", objectName, localPath); } catch (Exception e) { LOGGER.error("Download file from OSS failed, object name: {}", objectName, e); } } /** * 判断 OSS 上是否存在指定文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 * @return true:存在,false:不存在 */ public static boolean isExist(String bucketName, String objectName) { try { return ossClient.doesObjectExist(bucketName, objectName); } catch (Exception e) { LOGGER.error("Check object exist failed, object name: {}", objectName, e); return false; } } /** * 删除 OSS 上的文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 */ public static void deleteFile(String bucketName, String objectName) { try { ossClient.deleteObject(bucketName, objectName); LOGGER.info("Delete file from OSS success, object name: {}", objectName); } catch (Exception e) { LOGGER.error("Delete file from OSS failed, object name: {}", objectName, e); } } /** * 列举 OSS bucket 中的所有文件 * * @param bucketName OSS bucket 名称 * @return 文件列表 */ public static List<OSSObjectSummary> listObjects(String bucketName) { try { ObjectListing objectListing = ossClient.listObjects(bucketName); return objectListing.getObjectSummaries(); } catch (Exception e) { LOGGER.error("List objects failed, bucket name: {}", bucketName, e); return null; } } } ``` 使用方法: ```java // 初始化 OSS 客户端 AliyunOSSUtil.initOSSClient("your endpoint", "your accessKeyId", "your accessKeySecret"); // 上传文件 String fileUrl = AliyunOSSUtil.uploadFile("your bucket name", "your local file path", "your object name"); // 下载文件 AliyunOSSUtil.downloadFile("your bucket name", "your object name", "your local path"); // 判断文件是否存在 boolean isExist = AliyunOSSUtil.isExist("your bucket name", "your object name"); // 删除文件 AliyunOSSUtil.deleteFile("your bucket name", "your object name"); // 列举 bucket 中的所有文件 List<OSSObjectSummary> objectSummaries = AliyunOSSUtil.listObjects("your bucket name"); // 销毁 OSS 客户端 AliyunOSSUtil.destroyOSSClient(); ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值