AWS S3 上傳下載文件


前言

  Amazon文件服務器的使用,本章之記錄文件的上傳和下載。

pom依賴

  首先添加依賴

  <dependency>
     <groupId>com.amazonaws</groupId>
     <artifactId>aws-java-sdk-s3</artifactId>
     <version>1.11.336</version>
   </dependency>

 

 

正文

提供個工具類

 

public class FileUtils {
    // 【你的 access_key】
    static final String AWS_ACCESS_KEY = "*********";
    // 【你的 aws_secret_key】
    static final String AWS_SECRET_KEY = "*********************";
    // 儲存桶的名稱
    static final String BUCKET_NAME = "app-file-upload";
    // 設置服務器所屬地區
    static final Regions REGION = Regions.DEFAULT_REGION;
    // 儲存路徑
    static final String PATH = "uploadExcel";

    static final BasicAWSCredentials awsCreds = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);

    static final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds)).withRegion(REGION).build();

    @Autowired
    protected HttpServletRequest request;

    @Autowired
    protected HttpServletResponse response;

    /**
     * 上傳到文件返回一個文件儲存后的路徑
     * 
     * @param multipartFile
     * @return
     * @throws IOException
     * @throws SdkClientException
     * @throws AmazonServiceException
     * @throws Exception
     */
    public static String uploadFileToS3(MultipartFile multipartFile, String type)
            throws AmazonServiceException, SdkClientException, IOException {
        if (multipartFile.isEmpty()) {
            return "文件為空";
        }
        String dateString = DateUtils.convertToDate(LocalDate.now());
        long time = System.currentTimeMillis();
        // 拼接下文件路徑,為了不會出現文件覆蓋現象,加上時間戳
        String s3FilePath = PATH + "/" + type + "/" + dateString + "/" + time + "/"
                + multipartFile.getOriginalFilename();
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(multipartFile.getContentType());
        metadata.setContentLength(multipartFile.getSize());
        // 開始上傳文件
        s3.putObject(BUCKET_NAME, s3FilePath, multipartFile.getInputStream(), metadata);
        // 返回文件位置
        return s3FilePath;
    }

    /**
     * 用文件路徑獲取文件下載地址
     * 
     * @param path
     * @return
     */
    public static String getDownloadFileFromS3(String path) {
        return s3.generatePresignedUrl(new GeneratePresignedUrlRequest(BUCKET_NAME, path)).toString();
    }

    /**
     * 獲取S3Object對象
     * 
     * @param path
     * @return
     */
    public static S3Object getS3Object(String path) {
        S3Object s3Object = s3.getObject(BUCKET_NAME, path);
        return s3Object;
    }
}

 

S3Object 對象中有輸入流,可以使用創建文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM