package com.ycl;
|
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.OSSException;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ycl.entity.resources.ImageResources;
|
import com.ycl.mapper.resources.ImageResourcesMapper;
|
import com.ycl.service.oss.OssService;
|
import com.ycl.util.SpringContextUtil;
|
import com.ycl.utils.ConstantPropertiesUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.util.Date;
|
|
@Component
|
public class OSSImageMove extends Thread {
|
|
@Resource
|
ImageResourcesMapper imageResourcesMapper;
|
|
@Autowired
|
OssService ossService;
|
|
public void run() {
|
|
System.out.println("---------------OSSImageMove running");
|
|
imageResourcesMapper = SpringContextUtil.getBean("imageResourcesMapper", ImageResourcesMapper.class);
|
ossService = SpringContextUtil.getBean("ossServiceImpl", OssService.class);
|
|
System.out.println("---------------OSSImageMove start");
|
int i = 1;
|
while (true) {
|
IPage<ImageResources> page = new Page<>(i, 10);
|
LambdaQueryWrapper<ImageResources> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.isNull(ImageResources::getUrl1).orderByDesc(ImageResources::getId);
|
imageResourcesMapper.selectPage(page, queryWrapper);
|
System.out.println("page-current:" + page.getCurrent() + "--page-total:" + page.getTotal());
|
if (page.getRecords().size() > 0) {
|
for (ImageResources imageResources : page.getRecords()) {
|
try {
|
|
System.out.println("source-url:" + imageResources.getUrl());
|
|
String backUrl = extracted(imageResources.getUrl());
|
|
System.out.println("new-url:" + imageResources.getUrl());
|
imageResources.setUrl1(backUrl);
|
imageResourcesMapper.updateById(imageResources);
|
|
} catch (Exception e) {
|
System.out.println("OSSImageMove-error:" + e.getMessage());
|
}
|
}
|
} else {
|
break;
|
}
|
i++;
|
}
|
|
System.out.println("---------------OSSImageMove Over");
|
}
|
|
private String extracted(String imageUrl) {
|
String[] urls = imageUrl.split(",");
|
StringBuilder backUrl = new StringBuilder();
|
for (int j = 0; j < urls.length; j++) {
|
|
URL url = translateOSSUrl(urls[j]);
|
|
HttpURLConnection conn = null;
|
try {
|
conn = (HttpURLConnection) url.openConnection();
|
|
conn.setRequestMethod("GET");
|
conn.setConnectTimeout(10 * 1000);
|
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
|
|
InputStream inputStream = conn.getInputStream();// 通过输入流获取图片数据
|
|
if (inputStream != null) {
|
String picData = ossService.uploadImages(inputStream, ".png", 0);
|
backUrl.append(picData);
|
}
|
} catch (IOException e) {
|
System.out.println("OSSImageMove-translateOSSUrl-error:" + e.getMessage());
|
// throw new RuntimeException(e);
|
}
|
}
|
return backUrl.toString();
|
}
|
|
|
private URL translateOSSUrl(String fileUrl) {
|
OSS ossClient = null;
|
try {
|
String endpoint = ConstantPropertiesUtils.END_POINT;
|
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
|
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
|
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
|
|
String[] urlArray = fileUrl.split("Expires=");
|
|
String objectName = urlArray[0].replace(ConstantPropertiesUtils.PREFIX_URL, "");
|
objectName = objectName.replace("?", "");
|
|
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
// 设置签名URL过期时间,单位为毫秒。本示例以设置过期时间为1小时为例。
|
Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
|
// 生成以GET方法访问的签名URL。本示例没有额外请求头,其他人可以直接通过浏览器访问相关内容。
|
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
|
|
return url;
|
} catch (OSSException oe) {
|
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
+ "but was rejected with an error response for some reason.");
|
System.out.println("Error Message:" + oe.getErrorMessage());
|
System.out.println("Error Code:" + oe.getErrorCode());
|
System.out.println("Request ID:" + oe.getRequestId());
|
System.out.println("Host ID:" + oe.getHostId());
|
} finally {
|
if (ossClient != null) {
|
ossClient.shutdown();
|
}
|
}
|
return null;
|
}
|
}
|