图片存储解决方案---阿里云OSS
实现图片上传服务,方案:
- 直接将图片保存到服务所在的硬盘 优点:开发便捷,成本低 缺点:扩容困难
- 使用分布式文件系统进行存储 优点:容易实现扩容 缺点:部署复杂、开发复杂度稍大(有成熟的产品可以使用,比如:FastDFS)
- 使用第三方的存储服务 优点:开发简单,拥有强大功能,免维护 缺点:付费
1、导入依赖
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.6</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
2、Propeties 属性类
@Data @ConfigurationProperties(prefix = "oss")// 指定yml文件全路径,获取属性 public class OssProperties { private String accessKey; private String secret; private String bucketName; private String url; private String Endpoint; }
3、定义模板类
public class OssTemplate { private OssProperties properties; public OssTemplate(OssProperties properties) { this.properties = properties; } /** * 文件上传到阿里云OSS * @param fileName 上传文件名 * @param inputStream 文件输入流 * @return 图片的访问地址 */ public String upload(String fileName, InputStream inputStream) { // Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = properties.getEndpoint(); // 阿里云主账号AccessKey拥有所有API的访问权限 String accessKeyId = properties.getAccessKey(); String accessKeySecret = properties.getSecret(); // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); //获取上传后缀名 String sufix = fileName.substring(fileName.lastIndexOf(".")); /** * 文件名称: * images/2020/10/31/uuid(格式) * 拼接图片名称如下: */ String name = "images/"+new SimpleDateFormat("yyyy/MM/dd").format(new Date()) +"/" + UUID.randomUUID().toString() + sufix; ossClient.putObject(properties.getBucketName(), name, inputStream); // 关闭OSSClient。 ossClient.shutdown(); return "https://" + properties.getUrl() + "/" + name; } }
4、自动配置类
@Configuration // 自动的读取yml中配置信息,并赋值到OssProperties对象中,将此对象存入容器 @EnableConfigurationProperties({ OssProperties.class }) public class TanhuaAutoConfiguration { @Bean public OssTemplate ossTemplate(OssProperties ossProperties) { return new OssTemplate(ossProperties); } }
5、application.yml配置
# 阿里云oss上的信息 oss: accessKey: secret: bucketName: endpoint: url:
测试:
/** * 测试文件上传 */ @RunWith(SpringRunner.class) @SpringBootTest public class OssTest { @Autowired private OssTemplate ossTemplate; @Test public void testSendMsg() throws FileNotFoundException { String file = "D:\123.jpg";// 图片的路径 String url = ossTemplate.upload(file, new FileInputStream(file)); System.out.println("url = " + url); } }
上一篇:
IDEA上Java项目控制台中文乱码