栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

上传文件至亚马逊

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

上传文件至亚马逊

JAVA上传文件到亚马逊S3
  • jar包导入
  • yml引入配置
  • 配置Config
  • 上传文件代码

jar包导入

 com.amazonaws
    aws-java-sdk-s3
    1.11.600
    compile

yml引入配置
#amazon上传文件
amazon:
  s3:
    accessKey: AKIAU //
    secretKey: 0MXTb
    bucketName: wo  //存储桶名称
    host: https://存储桶名称.s3.us-east-2.amazonaws.com
    fileMaxSize: 50 #文件最大大小,单位M
    imageAutoZip: true #图片是否自动压缩,true是,默认false
    imageQuality: 0.5 #图片质量,默认0.5
配置Config
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
public class AmazonFileConfig {

    @Value("${amazon.s3.accessKey}")
    private String accessKey;
    @Value("${amazon.s3.secretKey}")
    private String secretKey;
    @Value("${amazon.s3.bucketName}")
    private String bucketName;
    @Value("${amazon.s3.host}")
    private String host;

    @Value("${amazon.s3.fileMaxSize}")
    private int fileMaxSize;
    @Value("${amazon.s3.imageAutoZip}")
    private boolean imageAutoZip = false;
    @Value("${amazon.s3.imageQuality}")
    private float imageQuality = 0.5F;

    @Bean
    public AmazonS3 amazonS3() {
        return new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));
    }


}
上传文件代码
  @Autowired
    private AmazonS3 s3;
    @Value("${spring.profiles.active}")
    private String active;
    @Autowired
    private AmazonFileConfig fileConfig;

    //文件类型
    private static List EXCLUSION_EXT_NAME = new ArrayList();

    static {
        String exclusionExtName = "jar|jsp|jspx|asp|aspx|sh|pl|php|bat|war";
        EXCLUSION_EXT_NAME = Splitter.on('|').omitEmptyStrings().splitToList(exclusionExtName);
    }

    @Override
    public FileEntity uploadFile(MultipartFile file,String filePath) throws Exception {
        if (file == null) {
            throw new InvokeException(-2002, "文件不能为空!");
        } else {
            String fileName = file.getOriginalFilename();
            String extName = FilenameUtils.getExtension(fileName);
            if(StringUtils.isBlank(extName)){
                return null;
            }
            if (EXCLUSION_EXT_NAME.contains(extName.toLowerCase())) {
                throw new InvokeException(-2006, "禁止上传[" + extName + "]文件类型!");
            } else {
                InputStream is = file.getInputStream();
                long fileSize = (long)is.available();
                if (fileSize > (long) fileConfig.getFileMaxSize() * 1024 * 1024) {
                    throw new InvokeException(-2005, "文件大小超出限制!");
                } else {
                    if(filePath == null || filePath =="") {
                        filePath = active + "/" + DateHelper.formatDate(new Date(), "yyyy/MM/dd/HH") + "/" + StringHelper.getUUID() + "." + extName;
                    }
                    InputStream inputStream = getInputStream(file);
                    filePath = this.uploadToS3(inputStream, filePath);
                    FileEntity fileEntity = new FileEntity();
                    fileEntity.setFilePath(filePath);
                    fileEntity.setFileSize(fileSize);
                    fileEntity.setFileName(fileName);
                    fileEntity.setExtName(extName);
                    this.saveFile(fileEntity);
                    return fileEntity;
                }
            }
        }
    }



    //上传到 amazon s3
    public String uploadToS3(InputStream inputStream, String remoteFileName) {
        try {
            String bucketName = fileConfig.getBucketName();
            ObjectMetadata metadata = new ObjectMetadata();
            if(remoteFileName.endsWith("jpg")||remoteFileName.endsWith("jpeg")||remoteFileName.endsWith("png")){
                metadata.setContentType("image/jpeg;application/octet-stream");
            }

            s3.putObject(new PutObjectRequest(bucketName, remoteFileName, inputStream, metadata)
                    .withCannedAcl(CannedAccessControlList.PublicRead));
            GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);
            URL url = s3.generatePresignedUrl(urlRequest);
            log.info("upload file path :" + url.toString());
            String path = this.dealS3Url(url.toString());
            return path;
        } catch (Exception ase) {
            ase.printStackTrace();
        }
        return null;
    }

    private String dealS3Url(String path) {
        //去掉问号后面的部分
        int index = path.indexOf("?");
        if (index == -1) {
            return path;
        }
        return path.substring(0, index);
    }


    //删除
    @Override
    public void removeAwsFile(String url) {
        String key = url.replace(fileConfig.getHost() + "/", "");
        s3.deleteObject(fileConfig.getBucketName(), key);
    }



    private InputStream getInputStream(MultipartFile file) throws IOException {
        if (fileConfig.isImageAutoZip()) {
            try {
                String extName = FilenameUtils.getExtension(file.getOriginalFilename());
                if (Pattern.matches("jpg|jpeg|png", extName.toLowerCase())) {
                    ByteArrayOutputStream os = new ByteArrayOutputStream();
                    BufferedImage bufferedImage = Thumbnails.of(new InputStream[]{file.getInputStream()}).scale(1.0D).outputQuality(fileConfig.getImageQuality()).asBufferedImage();
                    ImageIO.write(bufferedImage, extName, os);
                    return new ByteArrayInputStream(os.toByteArray());
                }
            } catch (IOException var4) {
            }
        }
        return file.getInputStream();
    }

    //保存记录
    private void saveFile(FileEntity fileEntity) {
        MFile file = new MFile();
        file.setUrl(fileEntity.getFilePath());
        file.setFileName(fileEntity.getFileName());
        file.setExtName(fileEntity.getExtName());
        file.setCreateTime(new Date());
        fileMapper.insert(file);
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号