s3 amazon常用接口

package com.hx.lubo.web.util;

/**
 * Created by Administrator on 2016/1/20.
 */


import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.util.StringUtils;
import com.hx.lubo.dto.StorageObjectVo;
import org.springframework.beans.factory.annotation.Value;


import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class FileStorageUtil {
    public static AWSCredentials awsCredentials;
    @Value("${access_key}")
    public static String access_key = "SK3A9042W5IMUJ1WET8V";
    @Value("${secret_key}")
    private static String secret_key = "c1BgQ8ge9OkZ0rZRSQp985Gauoxjv6laKGH3z02v";
    @Value("${endPoint}")
    private static String endPoint = "192.168.13.101";
    private static AmazonS3 conn;
    private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");//设置日期格式

    /**
     * 创建连接,连接S3服务器
     */
    public void creatConnect() {
        if (awsCredentials == null) {
            awsCredentials = new BasicAWSCredentials(access_key, secret_key);
            ClientConfiguration clientConfig = new ClientConfiguration();
            clientConfig.setProtocol(Protocol.HTTP);
            conn = new AmazonS3Client(awsCredentials, clientConfig);
            conn.setEndpoint(endPoint);
        }

    }

    public AmazonS3 getConnect() {
        return conn;
    }

    /**
     * 获取该连接下所有的容器信息
     * @return
     */
    public List<Bucket> getBuckets() {
        List<Bucket> buckets = conn.listBuckets();
        return buckets;
    }

    public Bucket getBuketsByname(String bucketName) {
        Bucket resultBucket = null;
        if (bucketName.isEmpty()) {
            return null;
        }
        List<Bucket> buckets = conn.listBuckets();
        if(buckets == null){
            return resultBucket;
        }
        for (Bucket bucket : buckets) {
            if (bucketName.equals(bucket.getName())) {
                resultBucket = bucket;
                break;
            }
        }
        return resultBucket;
    }

    /**
     * 新建容器名称
     * @param bucketName
     * @return
     */
    public Bucket creatBucket(String bucketName) {
        if (bucketName.isEmpty()) {
            return null;
        }
        Bucket bucket = conn.createBucket(bucketName);

        return bucket;
    }

    /**
     * 获取该容器下面的所有信息(文件目录集合和文件信息集合)
     * @param bucketName
     * @return
     */
    public ObjectListing getBacketObjects(String bucketName) {
        if (bucketName.isEmpty()) {
            return null;
        }
        ObjectListing objects = conn.listObjects(bucketName);
        return objects;
    }

    /**
     * 获取某个文件(前缀路径)下的所有信息
     * @param bucketName
     * @param prefix
     * @param isDelimiter
     * @return
     */
    public ObjectListing getBacketObjects(String bucketName, String prefix,Boolean isDelimiter ) {
        if ( bucketName == null || bucketName.isEmpty()) {
            return null;
        }
        ListObjectsRequest objectsRequest = new ListObjectsRequest().withBucketName(bucketName);
        if (prefix != null && !prefix.isEmpty()) {
            objectsRequest = objectsRequest.withPrefix(prefix);
        }
        if(isDelimiter){
            objectsRequest = objectsRequest.withDelimiter("/");
        }
        ObjectListing objects = conn.listObjects(objectsRequest);
        return objects;
    }

    /**
     * 获取当前容器下面的目录集合
     * @param objects
     * @return
     */
    public List<StorageObjectVo> getDirectList(ObjectListing objects) {
        List<StorageObjectVo> diectList = new ArrayList<StorageObjectVo>();
        String prefix = objects.getPrefix();
        do {
            List<String> commomprefix = objects.getCommonPrefixes();

            for (String comp : commomprefix) {
                StorageObjectVo dirStorageObjectVo = new StorageObjectVo();
                String dirName = comp.substring(prefix == null?0:prefix.length(), comp.length()-1);
                dirStorageObjectVo.setName(dirName);
                dirStorageObjectVo.setType("文件夹");
                diectList.add(dirStorageObjectVo);

            }
            objects = conn.listNextBatchOfObjects(objects);
        } while (objects.isTruncated());
        return diectList;
    }


    /**
     * 获取当前容器下面的文件集合
     * @param objects
     * @return
     */
    public List<StorageObjectVo> getFileList(ObjectListing objects) {
        List<StorageObjectVo> fileList = new ArrayList<StorageObjectVo>();
        String prefix = objects.getPrefix();
        do {
            for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                if(prefix!= null  && objectSummary.getKey().equals(prefix.trim())){
                    continue;
                }
                StorageObjectVo fileStorageObjectVo = new StorageObjectVo();
                String fileName = objectSummary.getKey().substring(prefix == null?0:prefix.length(), objectSummary.getKey().length());
//                fileStorageObjectVo.setName(objectSummary.getKey());
                fileStorageObjectVo.setName(fileName);
                fileStorageObjectVo.setType("文件");
                fileStorageObjectVo.setSize(bytes2kb(objectSummary.getSize()));
                fileStorageObjectVo.setDate(df.format(objectSummary.getLastModified()));
                fileList.add(fileStorageObjectVo);
            }
            objects = conn.listNextBatchOfObjects(objects);
        } while (objects.isTruncated());
        return fileList;
    }

    public List<StorageObjectVo> getObjectList(String bucketName, String prefix) {
        if ( bucketName == null && bucketName.isEmpty()) {
            return null;
        }
        ListObjectsRequest objectsRequest = new ListObjectsRequest().withBucketName(bucketName);
        if (prefix!=null &&  !prefix.isEmpty()) {
            objectsRequest = objectsRequest.withPrefix(prefix);
        }
        objectsRequest = objectsRequest.withDelimiter("/");
        ObjectListing objects = conn.listObjects(objectsRequest);
        List<StorageObjectVo> resultList = new ArrayList<StorageObjectVo>();
        List<StorageObjectVo> dirList = getDirectList(objects);
        if (dirList != null && dirList.size() > 0) {
            resultList.addAll(dirList);
        }
        List<StorageObjectVo> fileList = getFileList(objects);
        if (fileList != null && fileList.size() > 0) {
            resultList.addAll(fileList);
        }

        return resultList;
    }
    //创建文件目录
    public  Boolean creatpath(String bucketName,String StorageObjectVoPath,  String folderName){
        if(bucketName == null || folderName == null){
            return  false;
        }
        if(StorageObjectVoPath == null || StorageObjectVoPath.isEmpty()|| "null".equals(StorageObjectVoPath)){
            StorageObjectVoPath ="";
        }

        String key = StorageObjectVoPath + folderName+"/";
        ByteArrayInputStream local = new ByteArrayInputStream("".getBytes());
        PutObjectResult result =   conn.putObject(bucketName, key, local, new ObjectMetadata());
        return  true;

    }

    public Boolean deleteBucket(String bucketName) {
        if (bucketName.isEmpty()) {
            return false;
        }
        Bucket bucket = conn.createBucket(bucketName);
        conn.deleteBucket(bucket.getName());
        return true;
    }

    /**
     *
     * 上传 文件对象到容器
     * @param bucketName
     * @param StorageObjectVoPath
     * @param fileName
     * @param uploadFile
     * @return
     */
    public PutObjectResult creatObject(String bucketName,String StorageObjectVoPath, String fileName, File uploadFile) {
        if(StorageObjectVoPath == null || StorageObjectVoPath.isEmpty()|| "null".equals(StorageObjectVoPath)){
            StorageObjectVoPath ="";
        }
        if(uploadFile == null){
            return  null;
        }
        String fileAllPath = StorageObjectVoPath + fileName;
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(uploadFile);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        PutObjectResult result = conn.putObject(bucketName, fileAllPath, inputStream, new ObjectMetadata());
        return result;
    }


    public void changeOBjectACL(String bucketName, String ObjectName, CannedAccessControlList aceess) {

        conn.setObjectAcl(bucketName, ObjectName, aceess);

    }


    public ObjectMetadata download(String bucketName, String objectName, File destinationFile) {
        if (bucketName.isEmpty() || objectName.isEmpty()) {
            return null;
        }
        ObjectMetadata result = conn.getObject(new GetObjectRequest(bucketName, objectName), destinationFile);
        return result;
    }
    public S3Object download(String bucketName, String objectName) {
        if (bucketName.isEmpty() || objectName.isEmpty()) {
            return null;
        }
        S3Object  object = conn.getObject(bucketName, objectName);
        return object;
    }

    public Boolean deleteObject(String bucketName, String objectName) {
        if (bucketName.isEmpty() || objectName.isEmpty()) {
            return false;
        }
        conn.deleteObject(bucketName, objectName);
        return true;
    }

    /**生成文件url
     *
     * @param bucketName
     * @param objectName
     * @return
     */
    public String getDownloadUrl(String bucketName, String objectName) {
        if (bucketName.isEmpty() || objectName.isEmpty()) {
            return null;
        }
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName);
        System.out.println(conn.generatePresignedUrl(request));
        return conn.generatePresignedUrl(request).toString();
    }

    /**
     * 移动对象信息到目标容器
     * @param OrgbucketName
     * @param orgKey
     * @param destinationName
     * @param destinationKey
     * @return
     */
    public Boolean moveObject(String OrgbucketName,String orgKey,String destinationName,String destinationKey){
        CopyObjectResult result=conn.copyObject(OrgbucketName, orgKey, destinationName, destinationKey);
        Boolean isDelete=deleteObject(OrgbucketName,orgKey);
        if(result!=null){
            return isDelete;
        }
        return false;
    }

    /**
     * 移动目标文件夹信息到目标容器
     * @param objects
     * @param destinationBucket
     * @return
     */
    public Boolean moveForder(ObjectListing objects,String destinationBucket){
        String bucketName = objects.getBucketName();
        do {

            for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                CopyObjectResult result=conn.copyObject(bucketName, objectSummary.getKey(), destinationBucket,  objectSummary.getKey());
                Boolean isDelete=deleteObject(bucketName, objectSummary.getKey());
            }
            objects = conn.listNextBatchOfObjects(objects);
        } while (objects.isTruncated());
        return  true;
    }

    /**
     * 删除文件夹内容(必须先遍历删除文件夹内的内容)
     * @param objects
     * @return
     */
    public Boolean deleteForder(ObjectListing objects){
        String bucketName = objects.getBucketName();
        do {

            for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                Boolean isDelete=deleteObject(bucketName, objectSummary.getKey());
            }
            objects = conn.listNextBatchOfObjects(objects);
        } while (objects.isTruncated());
        return  true;
    }

    /**
     * 将文件大小格式转为MB格式
     * @param bytes
     * @return
     */
    public static String bytes2kb(long bytes) {
        BigDecimal filesize = new BigDecimal(bytes);
        BigDecimal megabyte = new BigDecimal(1024 * 1024);
        float returnValue = filesize.divide(megabyte, 2, BigDecimal.ROUND_UP)
                .floatValue();
        if (returnValue > 1)
            return (returnValue + "MB");
        BigDecimal kilobyte = new BigDecimal(1024);
        returnValue = filesize.divide(kilobyte, 2, BigDecimal.ROUND_UP)
                .floatValue();
        return (returnValue + "KB");
    }
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: S3对象存储是由亚马逊开发的一种云存储服务,允许用户在云端存储和检索数据。S3对象存储接口文档中文版是亚马逊提供给开发人员的指南,详细介绍了使用S3服务的各种方法和功能。 该文档包含了S3服务的各种API接口,开发人员可以通过这些接口对云存储中的对象进行管理。文档中详细列出了每个API接口的参数、请求方式、返回结果等信息,帮助开发人员理解和正确使用这些接口。此外,文档还提供了一些示例代码和最佳实践,帮助开发人员快速上手使用S3对象存储。 S3对象存储接口文档中文版涵盖了各种操作,包括创建和删除存储桶(bucket)、上传和下载对象(Object)数据、设置存储桶和对象的权限、复制和移动对象、查询对象和存储桶的元数据等。开发人员可以根据自己的需求选择相应的接口进行操作。 使用S3对象存储接口文档中文版,开发人员可以轻松地集成S3服务到自己的应用程序中,实现云端的数据存储和访问。通过合理利用S3对象存储服务,开发人员可以节省本地存储资源,实现高可靠性和高可用性的数据存储方案。 总之,S3对象存储接口文档中文版是一个宝贵的资源,提供了使用S3服务的详细指南和技术支持。开发人员可以依靠该文档了解S3服务的使用方法,快速搭建云端存储系统。 ### 回答2: S3对象存储接口文档中文版提供了AWS S3服务的详细说明和操作指南,帮助用户了解如何使用S3存储和管理对象数据。该文档包括了以下内容: 1. 介绍:文档提供了关于S3服务的概述,包括基本概念、使用场景和优势等。 2. 准备工作:文档指导用户在开始使用S3之前所需的准备工作,包括如何创建并配置S3存储桶。 3. API参考:文档列出了S3服务提供的API操作,包括对象的上传、下载、复制、删除等操作。每个操作都提供了详细的参数说明和示例代码,帮助用户快速了解和使用API。 4. 认证与授权:文档介绍了S3服务的认证和授权机制,包括如何使用访问密钥、签名请求等方式进行身份验证和权限管理。 5. 存储桶策略:文档详细介绍了S3存储桶策略的语法和功能,帮助用户根据自己的业务需求定义和管理存储桶的访问权限。 6. 错误处理:文档列出了S3服务可能返回的错误码及其含义,帮助用户识别和处理请求中可能出现的问题。 7. 最佳实践:文档为用户提供了一些使用S3的最佳实践和注意事项,包括数据管理、安全性和性能优化等方面的建议。 通过阅读S3对象存储接口文档中文版,用户可以了解S3服务的基本原理和操作方式,掌握使用S3进行对象存储的技能,从而更好地利用S3的强大功能来满足自己的存储需求。 ### 回答3: S3(Simple Storage Service)对象存储接口文档提供了使用S3服务的详细说明和指导。该文档包括了API的使用方法、请求和响应的结构、错误处理以及访问控制等方面的内容。 S3是亚马逊云服务(AWS)提供的一种云存储服务,它可以用来存储和检索任意类型的数据,包括文本、图像、视频和音频等。通过S3对象存储接口,开发人员可以方便地在应用程序中使用S3服务。 文档首先介绍了S3的基本概念和常用术语,例如Bucket(存储桶)、Object(对象)、Region(区域)等。然后详细说明了如何创建、管理和删除存储桶,以及如何上传、下载和删除对象等操作。 在请求和响应的结构方面,文档列举了各种API操作的具体参数,包括请求方法、输入参数和返回值。开发人员可以根据需要自定义请求,并解析返回结果以实现特定的功能。 文档还涵盖了错误处理和访问控制的内容。在错误处理方面,文档列举了可能的错误码和错误消息,并提供了相应的建议处理方法。在访问控制方面,文档介绍了如何使用AWS的身份和访问管理(IAM)来控制对存储桶和对象的访问权限。 总的来说,S3对象存储接口文档提供了全面的使用指南和参考,帮助开发人员快速上手并有效地使用S3服务。开发人员可以根据文档中的说明进行开发和调试,并在实际应用中灵活运用S3的各种功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值