锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Aws s3 实现文件上传和下载 (Java 使用)

时间:2022-09-10 04:00:00 s3壁挂型温湿度传感器

awsConfig

import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling;  @Slf4j @Data @EnableScheduling @Configuration public class AwsConfig {      @Value("${aws.accessKey}")     private String accessKey;      @Value("${aws.secretKey}")     private String secretKey;      @Value("${aws.region}")     private String region;      @Value("${aws.bucketName}")     private String bucketName;      @Bean     public AmazonS3 getAmazonS3() {         AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);         ClientConfiguration baseOpts = new ClientConfiguration();         //         baseOpts.setSignerOverride("S3SignerType");         baseOpts.setProtocol(Protocol.HTTPS);         //         AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard()                 .withRegion(region)                 .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) //                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(hostName, region))  // 如果有endpoint,可以用这个,这个和withRegion(Region)不能一起使用 //                .withPathStyleAccessEnabled(true)  // 如果配置了S3域名,就需要加这个进行路径访问,要不然会报AccessKey不存在的问题                 .withClientConfiguration(baseOpts)                 .build();         return amazonS3;     } }

Biz层(也就是service层)

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;  import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID;  @Slf4j @Service public class AwsS3Biz {       @Value("${aws.bucketName}")     private String bucketName;       @Autowired     private AwsConfig s3;         public String up(MultipartFile multipartFile){         ObjectMetadata objectMetadata = new ObjectMetadata();         objectMetadata.setContentType(multipartFile.getContentType());         objectMetadata.setContentLength(multipartFile.getSize());          //  桶名,文件夹名,本地文件路径         String key = multipartFile.getOriginalFilename();         try {             s3.getAmazonS3().putObject(new PutObjectRequest(bucketName, key, multipartFile.getInputStream(), objectMetadata));         } catch (IOException e) {             e.printStackTrace();         }         return key;     }       public String upload(MultipartFile multipartFile,Long analyzingId) {         if (multipartFile.isEmpty()) {             throw new BusinessException(408,"文件为空!");         }                  //         try {             ObjectMetadata objectMetadata = new ObjectMetadata();             objectMetadata.setContentType(multipartFile.getContentType());             objectMetadata.setContentLength(multipartFile.getSize());             // 文件后缀 //            String suffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));             String key = UUID.randomUUID().toString();             PutObjectResult putObjectResult = s3.getAmazonS3()                     .putObject(new PutObjectRequest(bucketName, key, multipartFile.getInputStream(), objectMetadata));             // 上传成功 关联到voc分析             if (null != putObjectResult) {                  // 返回key                 return key;             }         } catch (Exception e) {             log.error("Upload files to the bucket,Failed:{}", e.getMessage());             e.printStackTrace();         }         return null;     }       public String downloadFile(String key) {         try {             if (StringUtils.isEmpty(key)) {                 return null;             }             GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(bucketName, key); //            //设置过期时间 //            httpRequest.setExpiration(expirationDate);             return s3.getAmazonS3().generatePresignedUrl(httpRequest).toString();         } catch (Exceptione) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 判断名为bucketName的bucket里面是否有一个名为key的object
     * @param bucketName
     * @param key
     * @return
     */
    public boolean isObjectExit(String bucketName, String key) {
        int len = key.length();
        ObjectListing objectListing = s3.getAmazonS3().listObjects(bucketName);
        String s = new String();
        for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            s = objectSummary.getKey();
            int slen = s.length();
            if(len == slen) {
                int i;
                for(i=0;i

controller层 

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiOperationSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @author 三十七度
 */
@RestController
@RequestMapping(value = "/test")
@Validated
@SuppressWarnings("unchecked")
@Api(value = "AWS接口", tags = { "AWS接口" })
public class VocReportController {

    @Autowired
    private AwsS3Biz awsS3Biz;

    /**
     * 导入人工报告
     * @param file
     * @param analyzingId
     * @return
     * @throws IOException
     */
    @ApiOperation(value = "导入报告",notes = "导入报告")
    @ApiOperationSupport(order=0)
    @PostMapping("/importReport")
    public JsonResult importItems(@RequestParam("file") MultipartFile file, @RequestParam("analyzingId") Long analyzingId) throws IOException {

        String key = awsS3Biz.upload(file,analyzingId);

        return JsonResult.builder().data(key).build();
    }

    /**
     * 查看人工报告
     * @param
     * @return
     */
    @ApiOperation(value = "根据key查人工报告",notes = "根据key查看报告")
    @ApiOperationSupport(order=1)
    @GetMapping("/{key}")
    public JsonResult byAnalyzingId(@PathVariable("key") String key) {

        String url = awsS3Biz.downloadFile(key);
        return JsonResult.builder().data(url).build();
    }

    @GetMapping("/test")
    public JsonResult test() {

        awsS3Biz.getAllBucketObject();
        return JsonResult.builder().data("ok").build();
    }
}

yml文件

aws:
  region: x
  accessKey: x
  secretKey: xxxx
  bucketName: xxx


 pom依赖


     com.amazonaws
     aws-java-sdk-s3
     1.11.821

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章