本文将讲述如何使用Java代码上传文件到阿里云中,阿里云存储文件方便项目上线后的文件访问和存储,因为上线后就不能用本地进行存储了,后续的代码都在maven工程中进行编写的,当然使用SpringBoot工程也可以完成
使用步骤:
1.打开阿里云网站 https://www.aliyun.com/
2.注册阿里云账号
3.找到阿里云oss对象存储,立即开通
4.创建Bucket
5.上传文件即可
Java代码操作阿里云oss
1.上传文件到阿里云oss操作
1.准备工作:创建操作阿里云oss的许可证
找到Access Key并进行创建,然后保存好ID和密钥方便下一步操作
2.在idea中已入以下依赖进行SDK的安装
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ecs</artifactId>
<version>4.17.6</version>
</dependency>
3.编写application.properties配置文件
其中最后四条要按照自己的实际写
第一个为:你的bucket的区域id,第二个为你的bucket的ID,第三个为密钥,最后一个bucket名称
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=LTAI5tHb7RDmsLkRoUvVu2ik
aliyun.oss.file.keysecret=vf0sNHTfj14Q3ZhrJk9JyG8PtRFg9x
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=renyi-1997
4.创建工具类从application.properties配置文件中读取内容
package com.atguigu.oss.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ConstantPropertiesUtil implements InitializingBean {
//读取配置文件内容
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
5.创建controller类,设置访问地址调用service类
以下代码的controller和service需要创建controller和service包,且在同一个包下
其中的返回值类型可以写一个String类型,并返回成功即可
我这个是提前创建了一个返回类的提示工具类R,其他代码都一致
package com.atguigu.oss.controller;
import com.atguigu.commonutils.R;
import com.atguigu.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@CrossOrigin
@RestController
@RequestMapping("/eduoss/fileoss")
public class OssController {
@Autowired
private OssService ossService;
@PostMapping
public R uploadOssFile(MultipartFile file){
//获取上传文件
//返回上传oss路径
String url = ossService.uploadFileAavatar(file);
return R.ok().data("url", url);
}
}
6.创建service接口
package com.atguigu.oss.service;
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
String uploadFileAavatar(MultipartFile file);
}
7.创建service的实现类
此实现类是实现文件上传的主要业务代码
package com.atguigu.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.oss.service.OssService;
import com.atguigu.oss.utils.ConstantPropertiesUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
@Service
public class OssServiceImpl implements OssService {
//上传头像到oss
@Override
public String uploadFileAavatar(MultipartFile file) {
String endpoint = ConstantPropertiesUtil.END_POINT;
String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
try {
//创建ossClinet实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//上传文件流
InputStream inputStream = file.getInputStream();
//获取文件名称
String filename = file.getOriginalFilename();
//调用oss方法实现上传
//1.第一个参数为bucket名称 第二个为文件路径和文件名称 第三个为上传文件的输入流
ossClient.putObject(bucketName, filename,inputStream);
ossClient.shutdown();
//把上传文件的路径进行返回 https://renyi-1997.oss-cn-beijing.aliyuncs.com/888.jpg?versionId=null
String url = "https://"+bucketName+"."+endpoint+"/"+filename;
return url;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
8.创建启动类(要在service与controller包的父包中创建,也就是我这里的com.atguigu.oss包下)
package com.atguigu.oss;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.atguigu"})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
上传文件到阿里云就可以实现了,在项目中要结合前端上传文件使用,这里可以用swagger进行测试