package com.sandu.common.file.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.UUID; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qiniu.http.Response; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.util.Auth; import com.sandu.common.enums.FileStorageEnums; import com.sandu.common.execption.BusinessException; import com.sandu.common.file.FileUploadDto; import com.sandu.common.file.IFileUpload; import com.sandu.common.file.config.QiNiuOssProperties; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * @author chenjiantian * @date 2021/9/1 18:38 * 七牛上传 */ @AllArgsConstructor public class QiNiuFileUploadImpl implements IFileUpload { private QiNiuOssProperties qiNiuOssProperties; @SneakyThrows @Override public FileUploadDto uploadFile(MultipartFile multipartFile) { String originalFilename = multipartFile.getOriginalFilename(); FileUploadDto uploadDto = new FileUploadDto(); String suffix = FileUtil.getSuffix(originalFilename); String fileName = UUID.fastUUID().toString() + "." + suffix; Configuration cfg = new Configuration(); UploadManager uploadManager = new UploadManager(cfg); Auth auth = Auth.create("accessKey", qiNiuOssProperties.getAccessKey()); String upToken = auth.uploadToken(qiNiuOssProperties.getBucket()); Response response = uploadManager.put(multipartFile.getBytes(), null, upToken); if (!response.isOK()) { throw new BusinessException("七牛上传出错" + response.statusCode); } JSONObject jsonObject = JSON.parseObject(response.bodyString()); String key = jsonObject.getString("key"); String url = new File(qiNiuOssProperties.getHost(),key).getAbsolutePath(); uploadDto.setFileUrl(url); uploadDto.setOriginName(originalFilename); uploadDto.setFileName(fileName); uploadDto.setFileType(FileUtil.extName(originalFilename)); uploadDto.setStorageType(FileStorageEnums.QINIU.getCode()); uploadDto.setFileSize(multipartFile.getSize()); if (IMAGE_SUFFIX_LIST.contains(uploadDto.getFileType())) { BufferedImage img = null; try { img = ImageIO.read(multipartFile.getInputStream()); } catch (IOException e) { e.printStackTrace(); } if (img != null && img.getWidth() >= 0 && img.getHeight() >= 0) { uploadDto.setWidth(img.getWidth()); uploadDto.setHeight(img.getHeight()); } } return uploadDto; } }