Java对象存储OSS(AWS S3)上传和下载文件

package test;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
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.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.amazonaws.services.s3.model.S3Object;

import java.io.*;

public class OSSTest {
    public static void main(String[] args) throws Exception {
        //uploadFile();
       getFile();
    }
    //上传文件
    public static void uploadFile(){
        //读写账号
        String bucketName = "bucketName";
        String endpoint = "ip:端口";
        String key = "key";
        String secret = "secretKey";
        //创建Amazon S3对象使用明确凭证
        ClientConfiguration clientConfig = new ClientConfiguration();
        clientConfig.setProtocol(Protocol.HTTP);//访问协议
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(key, secret);
        AmazonS3Client s3Client = new AmazonS3Client(awsCredentials, clientConfig);
        s3Client.setEndpoint(endpoint);
        File fileZip = new File("C:/Users/yonghu/Desktop/密码.txt");
        String fileName = fileZip.getName();
        System.out.println("fileName=" + fileName);
        //上传的路径加文件名,该值需要唯一
        String fileKey="test/mes/a/b/密码.txt";
        PutObjectResult result1 = s3Client.putObject(bucketName, fileKey, fileZip);
        System.out.println("文件信息"+result1.toString());
    }

    /**
     * Endpoint
     * Key
     * secretKey
     * bucketname
     * port:8060
     * @throws IOException
     */
    public static void getFile() throws Exception {
        //oss参数信息(只读账号)
        String endpoint = "ip:端口";
        String key = "key";
        String secret = "secretKey";
        String bucketName = "bucketName";
        // 唯一文件名(由PLM上传之后提供)
        String fileKey = "test/mes/a/b/测试1.xlsx";
        S3Object fullObject = null;
        try {
            AWSCredentials credentials = new BasicAWSCredentials(key, secretKey);
            //创建Amazon S3对象使用明确凭证
            ClientConfiguration clientConfig = new ClientConfiguration();
            clientConfig.setProtocol(Protocol.HTTP);
            AmazonS3 s3Client = new AmazonS3Client(credentials, clientConfig);
            s3Client.setEndpoint(endpoint);
            // 获取对象
            fullObject = s3Client.getObject(new GetObjectRequest(bucketName, fileKey));
            // 打印对象的元数据 Content-Type
            System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType());
            //打印文件内容
            // displayTextInputStream(fullObject.getObjectContent());
            //下载文件
            downloadFile(fullObject.getObjectContent(),fileKey);
        }catch(AmazonServiceException e) {
            // 服务端错误
            e.printStackTrace();
        }catch(AmazonClientException e) {
            // 客户端错误
            e.printStackTrace();
        }
        finally {
            // 为了确保网络连接断开,请关闭任何打开的输入流
            if(fullObject != null) {
                fullObject.close();
            }
        }
    }

    private static void downloadFile(InputStream inputStream,String fileKey) throws  Exception{
        String fileFront = "";
        //创建对应的文件路径(根据AWS S3上的文件来创建)
        if(fileKey.indexOf("/")>-1){
            //唯一文件的去掉文件名的的部分
            fileFront = fileKey.substring(0,fileKey.lastIndexOf("/"));
        }
        if(fileFront.indexOf("/")>-1){
            //循环创建
            String[] vStrings =  fileFront.split("/");
            String b = "";
            for(int i =0;i                 b = b+"/"+vStrings[i];
                File file=new File("D:"+b);
                if(!file.exists()){//如果文件夹不存在
                    file.mkdir();//创建文件夹
                }
            }
        }else{
            String fileCatalogue = "D:/"+fileFront;
            File file=new File(fileCatalogue);
            if(!file.exists()){//如果文件夹不存在
                file.mkdir();//创建文件夹
            }
        }
        FileOutputStream fileOutputStream=null;
        byte[] data=null;
        try {
            data =new byte[inputStream.available()];
            int len=0;
            //目标文件的生成
            fileOutputStream=new FileOutputStream("D:/"+fileKey);
            while((len=inputStream.read(data)) != -1){
                fileOutputStream.write(data,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileOutputStream!=null){
                try {
                    fileOutputStream.close();//文件流关闭
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(inputStream!=null){
                try {
                    inputStream.close();//文件流关闭
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    //打印文件内容
    private static void displayTextInputStream(InputStream input) throws IOException {
        // 每次读取一行文本,并显示每一行
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println();
    }
}
 

你可能感兴趣的:(java,java,html,servlet)