minio依赖这里就不引入了。方便使用。
这里分别实现,文件的上传,查询、及其删除功能。
package com.gxzc.dsppm.web.controller;
import com.gxzc.dsppm.web.api.enums.CommodityEnum;
import com.gxzc.dsppm.web.service.UploadFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.lan.iti.common.model.response.ApiResult;
import org.lan.iti.common.scanner.annotation.ITIApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date Create in 18:10 2020/5/7 0007
* @description 文件上传到文件服务器minio
*/
@ITIApi
@RestController
@RequestMapping(value = "uploadminio")
@AllArgsConstructor
@Api(tags = "文件上传接口")
public class UploadMinioController {
@Autowired
private UploadFileService uploadFileService;
@ITIApi
@ApiOperation(value = "使用minio文件上传(支持多个文件和单个文件的上传)")
@PostMapping(value = "/uploadFile")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "MultipartFile", name = "files", value = "上传的图片", required = true),
@ApiImplicitParam(dataType = "String", name = "bucketName", value = "对象存储桶名称", required = true)
})
public ApiResult<?> uploadFile(MultipartFile[] files, String bucketName) {
try {
List<String> filenames = new ArrayList<>();
for (MultipartFile multipartFile : files) {
filenames.add(uploadFileService.uploadFile(multipartFile, bucketName));
}
return ApiResult.ok(StringUtils.join(filenames, ","));
} catch (Exception e) {
e.printStackTrace();
return ApiResult.ok(CommodityEnum.ADDSTOCKINFail.getResult(), CommodityEnum.ADDSTOCKINFail.getNumber());
}
}
@ITIApi
@ApiOperation(value = "获取文件对象")
@GetMapping(value = "/getFileInfo")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "String", name = "objectName" ,value = "需要获取的对象" ,required = true),
@ApiImplicitParam(dataType = "String", name = "bucketName" ,value = "对象存储桶名称" ,required = true)
})
public ApiResult<?> getFileInfo(String objectName, String bucketName) {
try {
return ApiResult.ok(uploadFileService.getFileInfo(objectName,bucketName));
}catch (Exception e){
e.printStackTrace();
return ApiResult.ok(CommodityEnum.GETSTOCKINFail.getResult(),CommodityEnum.GETSTOCKINFail.getNumber());
}
}
@ITIApi
@ApiOperation(value = "删除文件对象")
@DeleteMapping(value = "/getFileInfo")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "String", name = "objectName" ,value = "对象名称" ,required = true),
@ApiImplicitParam(dataType = "String", name = "bucketName" ,value = "对象存储桶名称" ,required = true)
})
public ApiResult<?> delFileInfo(String objectName,String bucketName) {
try {
uploadFileService.delFileInfo(objectName,bucketName);
return ApiResult.ok(CommodityEnum.DELSTOCKINSUCCESS.getResult(),CommodityEnum.DELSTOCKINSUCCESS.getNumber());
}catch (Exception e){
e.printStackTrace();
return ApiResult.ok(CommodityEnum.DELSTOCKINFail.getResult(),CommodityEnum.DELSTOCKINFail.getNumber());
}
}
@ITIApi
@ApiOperation(value = "指定路径上传文件对象")
@PostMapping("/uploadSpecifyPath")
Object uploadSpecifyPath(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
String path = "D:/home/tmpUpload/";
File targetFile = new File(path);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(path + fileName);
// String filePath = path + fileName;
out.write(file.getBytes());
out.flush();
out.close();
return CommodityEnum.ADDSTOCKINSUCCESS.getResult();
}
}
package com.gxzc.dsppm.web.service.impl;
import cn.hutool.core.util.IdUtil;
import com.gxzc.dsppm.web.service.UploadFileService;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date Create in 18:36 2020/5/7 0007
* @description
*/
@Service
public class UploadFileServiceImpl implements UploadFileService {
/*minio配置*/
@Value("${minio.endpoint}") private String endpoint;
@Value("${minio.accessKey}") private String accessKey;
@Value("${minio.secretKey}") private String secretKey;
@Override
public String uploadFile(MultipartFile file, String bucketName) throws Exception {
try {
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
String fileName = file.getOriginalFilename();
String objectName = IdUtil.simpleUUID()+fileName.substring(fileName.lastIndexOf("."),fileName.length());
minioClient.putObject(bucketName,objectName,file.getInputStream(),file.getInputStream().available(),file.getContentType());
return objectName;
}catch (Exception e){
throw e;
}
}
@Override
public String getFileInfo(String objectName, String bucketName) throws Exception {
try {
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
return minioClient.presignedGetObject(bucketName,objectName,6);
}catch (Exception e){
throw e;
}
}
@Override
public void delFileInfo(String objectName, String bucketName) throws Exception {
try {
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
minioClient.removeObject(bucketName,objectName);
}catch (Exception e){
throw e;
}
}
}