一、创建阿里云OOS
网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
1.创建bucket
创建Bucket的位置可能每个人都不一样,如果不一样的,自己搜就可以了
创建成功进入bucket
2.创建私钥
点击创建(ps:这里我本身就创建了一个)
创建好了,要把AccessKeyID 和AccessKey Secret保存下来。
二、java操作
1.所需依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.7.0</version> <scope>compile</scope> </dependency>
2.核心代码
1.上传文件工具类
参数说明
endpoint:
这里是刚才我们选择的城市对应的域名,比如华北2(北京)为:oss-cn-beijing.aliyuncs.com,如果不知到的话,可以去查找。
bucketName:这里是我们创建的bucket自定义的名称
AccessKeyId、AccessKeySecret:这是前面让保存下来的的密钥
objectName:这里存储文件的完整路径
public class FileUtil { /** * 上传文件到阿里云的OOS * @param endpoint * @param bucketName * @param AccessKeyId * @param AccessKeySecret * @param objectName 路径 + 文件名 * @param inputStream */ public static String uploadFileToAliOOS(String endpoint, String bucketName, String AccessKeyId, String AccessKeySecret, String objectName, InputStream inputStream) { OSS ossClient = new OSSClientBuilder().build(endpoint, AccessKeyId, AccessKeySecret); try { ossClient.putObject(bucketName, objectName, inputStream); //返回URL,这里防止不能访问,就进行了自行拼接 URL url = ossClient.generatePresignedUrl(bucketName, objectName, new Date()); return url.getProtocol() + "://" + url.getHost() + url.getPath(); } catch (Exception e) { throw new RuntimeException(e); } finally { if (ossClient != null) { ossClient.shutdown(); } } } /** * 获取文件后缀 * @param filename * @return */ public static String getSuffix(String filename) { if (filename == null) { throw new NullPointerException("文件名为空"); } return filename.substring(filename.lastIndexOf(".") + 1); }}
2.service
/** * 上传文件 * @param multipartFile * @return */ @Override public String uploadFile(MultipartFile multipartFile) { if (Objects.isNull(multipartFile)) { throw new ServiceException("文件为空"); } //以当前日期作为目录存储 String dirName = DateUtil.format(DateUtil.now(), "yyyy/MM/dd"); //防止上传的文件名重复,使用UUID作为文件名 String fileName = UUID.randomUUID().toString() + "." + FileUtil.getSuffix(multipartFile.getResource().getFilename()); String objectName = dirName + "/" + fileName; String storageUrl = "";//返回存储的URL,供前端访问 try { storageUrl = FileUtil.uploadFileToAliOOS(endpoint, bucketName, accessKeyId, accessKeySecret, objectName, multipartFile.getInputStream()); return storageUrl; } catch (Exception e) { throw new ServiceException("文件上传失败"); }