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 page = new Page<>(i, 10); LambdaQueryWrapper 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; } }