文章目录
前言
做一个图片上传的功能,图片存储到阿里云服务器。
一、为上传图片做准备
首先需要在阿里云充钱
在阿里云上找到对象存储oos
点击管理控制台
点击创建Bucket
创建的bucket名字
然后按照我的来创建就行。
这是阿里云存储图片的桶
然后鼠标放到头像上点击AccessKey
点击创建AccessKey
创建好AccessKey后AccessKeyID就是key
下面的密钥要记住,只会显示一次,最好复制粘贴到自己能找到的位置。
后面写代码要用
二、代码实现图片上传
首先找到阿里云提供的sdk
添加依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.6</version>
</dependency>
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class OssTest {
public static void main(String[] args) throws FileNotFoundException {
// 区域
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 秘钥
String accessKeyId = "LTAI5tNmH22y9C7AxdFEgdNv";
String accessKeySecret = "AHGC0JSnBuYtYg3BnNvyTuwlwyl27n";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件
InputStream inputStream = new FileInputStream("D:\\upload\\jr.jpg");
//参数1: 桶名字 参数2: 图片上传后名字 参数3: 图片流
ossClient.putObject("tlias-gxm-191", "haha.jpg", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
}
}
创建配置类
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "oss")//读取配置信息
public class OssProperties {
private String key; //访问key
private String secret;//访问秘钥
private String endpoint;//端点
private String bucket;//桶名
}
访问key就是AccessID
secret就是访问密钥
endpoint是连接服务器的端点
bucket是自己创建的桶名
这些信息写在配置文件中
创建工具类
//阿里存储工具类
@Component
@Import(OssProperties.class)//导入,相当于将OssProperties对象放入容器
public class OssTemplate {
@Autowired
private OssProperties ossProperties;
//文件上传
public String upload(String fileName, InputStream inputStream) {
//创建客户端
OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getKey(), ossProperties.getSecret());
//设置文件最终的路径和名称
String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())
+ "/" + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."));
//meta设置请求头,解决访问图片地址直接下载
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));
//上传
ossClient.putObject(ossProperties.getBucket(), objectName, inputStream, meta);
//关闭客户端
ossClient.shutdown();
return "https://" + ossProperties.getBucket() + "." + ossProperties.getEndpoint() + "/" + objectName;
}
//文件后缀处理
private String getContentType(String FilenameExtension) {
if (FilenameExtension.equalsIgnoreCase(".bmp")) {
return "image/bmp";
}
if (FilenameExtension.equalsIgnoreCase(".gif")) {
return "image/gif";
}
if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
FilenameExtension.equalsIgnoreCase(".jpg") ||
FilenameExtension.equalsIgnoreCase(".png")) {
return "image/jpg";
}
return "image/jpg";
}
}
图片上传实现
点击图片上传就会上传到阿里云服务器上,返回一个图片下载地址。
然后点击提交会将上传图片的地址插入到数据库。