java 通过阿里云上传图片

Posted qqzhulu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 通过阿里云上传图片相关的知识,希望对你有一定的参考价值。

一、控制层传参:Images(要上传的图片)

@Autowired
private ImageUploadServiceImpl imageUploadService;

public Object imagesAdd(@RequestParam(value = "Images", required = false) MultipartFile[] Images) {

if (Images != null && Images.length > 0) {
String images = "[";
if (Images != null && Images.length > 0) {
for (int i = 0; i < Images.length; i++) {
String imageUrl = imageUploadService.uploadFile(Images[i]);
if (i == 0) {
images += imageUrl;
continue;
 } else {
images += "," + imageUrl;
 }
 }
 }
images += "]";

 }

return images;

2、服务层,上传图片

@Service
public class ImageUploadServiceImpl implements ImageUploadService {

// endpoint以杭州为例,其它region请按实际情况填写
static String endpoint = "*******";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
static String accessKeyId = "*******";
static String accessKeySecret = "*******";
static String bucketname = "*******";
private volatile static OSSClient ossClient;
// @Autowired
// ExceptionLogService exceptionLogService;
@Autowired
StorageServiceImpl storageObjectService;
@Autowired
MemberServiceImpl memberService;

public ImageUploadServiceImpl() {
if (ossClient == null) {
synchronized (this) {
if (ossClient == null) {
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}
}
}

@Override
public String uploadFile(MultipartFile imgFile) {
String avatarUrl = null;

try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(imgFile.getBytes());
String md5 = new BigInteger(1, md.digest()).toString(16);
StorageObject storageObject = storageObjectService.findByMd5code(md5);
if (storageObject == null) {
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(imgFile.getSize());
String guessContentType = imgFile.getContentType();
meta.setContentType(guessContentType);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String data = sdf.format(new Date());
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//获得文件后缀名称
String imageName = guessContentType.substring(guessContentType.indexOf("/") + 1);
String fileId = data + "/" + uuid + "." + imageName;
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketname, fileId, imgFile.getInputStream());//上传文件
putObjectRequest.setMetadata(meta);
ossClient.putObject(putObjectRequest);//上传图片
storageObject = new StorageObject();
storageObject.setCreateTime(new Date());
storageObject.setMd5(md5);
StringBuffer url = new StringBuffer("http://");
url.append(bucketname).append(".").append(endpoint).append("/").append(fileId);
storageObject.setUrl(url.toString());
storageObjectService.save(storageObject);
}
avatarUrl = storageObject.getUrl().toString();
} catch (IOException e) {
throw new ServiceException("上传头像出错");
} catch (NoSuchAlgorithmException e) {
throw new ServiceException("上传头像出错");
}
return avatarUrl;
}
}

 

以上是关于java 通过阿里云上传图片的主要内容,如果未能解决你的问题,请参考以下文章

图片上传阿里云(对象存储OSS)

阿里云oss图片上传

阿里云oss图片上传

阿里云oss图片上传

Java中使用RestFul接口上传图片到阿里云OSS服务器

小程序/H5上传图片到阿里云上图片被旋转