obs 上传缩略图

    public void thumbnail(PutObjectRequest request, UploadParam param) throws IOException {
        if (ObjectUtils.isEmpty(param.getThumbnail()) || !param.getThumbnail()) {
            return;
        }
        String fileExtension = getFileExtension(request.getObjectKey());
        List<String> fileExtensionList = Arrays.asList(obsConfig.getImgType().toString().split(","));
        if (!fileExtensionList.contains(fileExtension)) {
            return;
        }
        BufferedImage originalImage = ImageIO.read(param.getUploadFile().getInputStream());
        // 获取原始图片宽度
        int originalWidth = originalImage.getWidth();
        // 获取原始图片高度
        int originalHeight = originalImage.getHeight();
        //计算宽高比例
        double ratio = (double) originalWidth / originalHeight;

        // 设置压缩后图片的宽度
        int targetWidth = param.getTargetWidth(); // 设置压缩后图片的宽度为100px
        // 根据宽高比例计算压缩后图片的高度
        int targetHeight = (int) (targetWidth / ratio);

        BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, originalImage.getType());
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);
        g.dispose();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        ImageIO.write(resizedImage, fileExtension, byteArrayOutputStream);

        InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

        try (ObsClient obsClient = new ObsClient(obsConfig.getAk(), obsConfig.getSk(), obsConfig.getEndPoint())) {
            PutObjectRequest thumbnailRequest = new PutObjectRequest();
            thumbnailRequest.setBucketName(obsConfig.getBucketName());
            thumbnailRequest.setObjectKey("thumbnail/" + request.getObjectKey());
            thumbnailRequest.setAcl(AccessControlList.REST_CANNED_PRIVATE);
            thumbnailRequest.setInput(inputStream);

            PutObjectResult result = obsClient.putObject(thumbnailRequest);
            String url = generateObjectUrl(result);
            log.info("{} upload img : {}", param.getUserName(), url);
        } catch (ObsException e) {
            log.error("HTTP Code: " + e.getResponseCode());
            log.error("Error Code:" + e.getErrorCode());
            log.error("Error Message: " + e.getErrorMessage());
            log.error("Request ID:" + e.getErrorRequestId());
            log.error("Host ID:" + e.getErrorHostId());
        } catch (Exception e) {
            log.error("其他错误: " + e.getMessage());
        } finally {
            byteArrayOutputStream.close();
        }
    }
@Data
public class UploadParam {
    private MultipartFile uploadFile;
    private String userName;
    private String type;
    private Boolean byName;
    private Boolean thumbnail;
    private Integer targetWidth;

    public UploadParam() {
        this.thumbnail = false;
        this.targetWidth = 100;
    }

}

  

posted @ 2024-12-13 16:11  八英里  阅读(4)  评论(0编辑  收藏  举报