<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
- Spring Boot 的properties.yml配置
Spring:
cloud:
alicloud:
access-key:
secret-key:
oss:
endpoint: oss-cn-hangzhou.aliyuncs.com
bucketname:
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class OssUtil implements InitializingBean {
@Value("${spring.cloud.alicloud.oss.endpoint}")
private String endpoint;
@Value("${spring.cloud.alicloud.access-key}")
private String accessKeyID;
@Value("${spring.cloud.alicloud.secret-key}")
private String accesskeySecret;
@Value("${spring.cloud.alicloud.oss.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 = accessKeyID;
ACCESS_KEY_SECRET = accesskeySecret;
BUCKET_NAME = bucketName;
}
}
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
String uploadFile(MultipartFile file);
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectResult;
import com.kiseki.service.OssService;
import com.kiseki.util.OssUtil;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@Service
@Slf4j
public class OssServiceImpl implements OssService {
@Override
public String uploadFile(MultipartFile file) {
String url = null;
String endpoint = OssUtil.END_POINT;
String accessKeyId = OssUtil.ACCESS_KEY_ID;
String accessKeySecret = OssUtil.ACCESS_KEY_SECRET;
String bucketName = OssUtil.BUCKET_NAME;
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
InputStream inputStream = file.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > -1) {
baos.write(buffer, 0, len);
}
baos.flush();
String md5 = DigestUtils.md5DigestAsHex(baos.toByteArray());
log.info("md5:{}", md5);
InputStream inputStreamForMD5 = new ByteArrayInputStream(baos.toByteArray());
InputStream inputStreamForOss = new ByteArrayInputStream(baos.toByteArray());
String filename = file.getOriginalFilename();
String fileSuffix = filename.substring(file.getOriginalFilename().lastIndexOf("."));
String md5OfFileName = DigestUtils.md5DigestAsHex(inputStreamForMD5);
String dateMark = DateTime.now().toString("yyyyMMdd/");
final String uploadKey = dateMark + md5OfFileName + fileSuffix;
log.info("uploadKey:{}", uploadKey);
PutObjectResult putObjectResult = ossClient.putObject(bucketName, uploadKey, inputStreamForOss);
String eTag = putObjectResult.getETag();
log.info("eTag:{}", eTag);
url = "https://" + bucketName + "." + endpoint + "/" + uploadKey;
log.info("Image URL:{}", url);
} catch (IOException e) {
e.printStackTrace();
} finally {
ossClient.shutdown();
}
return url;
}
}
import com.kiseki.service.OssService;
import com.kiseki.vo.ApiResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("api/Upload")
@Api(tags = "上传数据接口")
@Validated
@Slf4j
@CrossOrigin
public class UploadAPI {
@Autowired
OssService ossService;
@ApiOperation(value = "上传图片", notes = "图片需为jpg,jpeg,gif,png格式。")
@PostMapping("/OssImage")
public ApiResponse uploadImage(@RequestPart("图片") MultipartFile image) {
if (image.getSize() > 1024 * 1024 * 5) {
return ApiResponse.fail("附件大小不能大于5M");
}
String pictureSuffix = image.getOriginalFilename().substring(image.getOriginalFilename().lastIndexOf(".") + 1);
if (!"jpg,jpeg,gif,png".toUpperCase().contains(pictureSuffix.toUpperCase())) {
return ApiResponse.fail("请选择jpg,jpeg,gif,png格式的图片");
}
return ApiResponse.success(ossService.uploadFile(image));
}
}