基本信息:
请求路径:/upload
请求方式:POST
接口描述:上传图片接口
请求参数:
参数格式:multipart/form-data
参数说明:
参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
image | file | 是 |
响应数据:
参数格式:application/json
参数说明:
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 非必须 | 返回的数据,上传图片的访问路径 |
响应数据样例:
{ "code": 1, "msg": "success", "data": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-0400.jpg" }
Controller层:
@Slf4j //日志
@RestController //声明IOC容器中的bean对象
public class UploadController {
// @Autowired //依赖注入
// private AliOSSUtils aliOSSUtils; //阿里云存储
@Autowired
private FileUploader fileUploader; //MinIO存储
@PostMapping("/upload") //请求url
public Result upload(MultipartFile image) throws Exception {
//调用阿里云OSS工具类,将上传上来的文件存入阿里云
// String url = aliOSSUtils.upload(image);
//调用MinIO工具类,将上传上来的文件存入MinIO
String url = fileUploader.upload(image);
//将图片上传完成后的url返回,用于浏览器回显展示
return Result.success(url);
}
}
调用MinIO工具类:
@Component
public class FileUploader {
public String upload(MultipartFile file) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
String bucketName = "web-itcast"; // 桶名称
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("minioad***", "minioad***")
.build();
// 检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (isExist) {
System.out.println("Bucket already exists.");
} else {
// 创建一个名为 huike-crm 的存储桶,用于存储照片的zip文件。
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
String fileName = file.getOriginalFilename();//合同.pdf
String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "")
+ fileName.substring(fileName.lastIndexOf("."));
// 使用putObject上传一个文件到存储桶中。
PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
.bucket(bucketName)
.contentType(file.getContentType())
.stream(file.getInputStream(), file.getSize(), -1).build();
minioClient.putObject(objectArgs);
// 返回上传文件名
return "http://127.0.0.1:9000/"+bucketName+"/"+objectName;
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
return null;
}
}
aliyun工具类:
@Component
public class AliOSSUtils {
private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
private String accessKeyId = "***";
private String accessKeySecret = "***";
private String bucketName = "web-duangu";
/**
* 实现上传图片到OSS
*/
public String upload(MultipartFile multipartFile) throws IOException {
// 获取上传的文件的输入流
InputStream inputStream = multipartFile.getInputStream();
// 避免文件覆盖
String originalFilename = multipartFile.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
//上传文件到 OSS
OSS ossClient = new OSSClientBuilder().build(aliOSSProPerties.getEndpoint(), aliOSSProPerties.getAccessKeyId(), aliOSSProPerties.getAccessKeySecret());
ossClient.putObject(aliOSSProPerties.getBucketName(), fileName, inputStream);
//文件访问路径
String url = aliOSSProPerties.getEndpoint().split("//")[0] + "//" + aliOSSProPerties.getBucketName() + "." + aliOSSProPerties.getEndpoint().split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}
返回值类型Result:
@Data //get、set方法
@NoArgsConstructor //无参构造器
@AllArgsConstructor //有参构造器
public class Result {
private Integer code;//响应码,1 代表成功; 0 代表失败
private String msg; //响应信息 描述字符串
private Object data; //返回的数据
//增删改 成功响应
public static Result success(){
return new Result(1,"success",null);
}
//查询 成功响应
public static Result success(Object data){
return new Result(1,"success",data);
}
//失败响应
public static Result error(String msg){
return new Result(0,msg,null);
}
}