阿里云oss上传本地文件到服务器实例

Java 项目开发中阿里云 oss上传本地到服务器以及下载功能实现实例。

AliyunOSSUtil类:

public class AliyunOSSUtil {

/**
 * 该示例代码展示了如果在OSS中创建和删除一个Bucket,以及如何上传和下载一个文件。
 * 
 * 该示例代码的执行过程是:
 * 1. 创建一个Bucket(如果已经存在,则忽略错误码);
 * 2. 上传一个文件到OSS;
 * 3. 下载这个文件到本地;
 * 4. 清理测试资源:删除Bucket及其中的所有Objects。
 * 
 * 尝试运行这段示例代码时需要注意:
 * 1. 为了展示在删除Bucket时除了需要删除其中的Objects,
 *    示例代码最后为删除掉指定的Bucket,因为不要使用您的已经有资源的Bucket进行测试!
 * 2. 请使用您的API授权密钥填充ACCESS_ID和ACCESS_KEY常量;
 * 3. 需要准确上传用的测试文件,并修改常量uploadFilePath为测试文件的路径;
 *    修改常量downloadFilePath为下载文件的路径。
 * 4. 该程序仅为示例代码,仅供参考,并不能保证足够健壮。
 *
 */

    private static final String ACCESS_ID = "cvj2e9aH*****";
    private static final String ACCESS_KEY = "KFdm4MeaT******";
    private static final String endPoint = "http://oss-cn-beijing.aliyuncs.com";
    private static final String bucketName = "x******";
	
    // 设置URL过期时间为1天
    private static final Date expiration = new Date(new Date().getTime() + 3600 * 1000 * 24);
    //在自己内部定义自己的一个 实例,只供内部调用
    private static final OSSClient client = new OSSClient(endPoint, ACCESS_ID, ACCESS_KEY);
    
    private AliyunOSSUtil(){
        //do something
    }
    //单例模式
    //获得客户端
    public static OSSClient getOSSClient(){
        return client;
    }
    
    //创建一个Bucket
    public static void ensureBucket()throws OSSException, ClientException{
        try {
            // 创建bucket, 判断bucket是否存在
        	boolean exists = client.doesBucketExist(bucketName);
        	if(!exists){
        		client.createBucket(bucketName);
        	}else{
        		
        	}
        } catch (ServiceException e) {
            System.out.println(e.getErrorCode() + "  " + e.getErrorMessage());
                throw e;
        }
    }
		
    // 获取指定bucket下的所有Object信息
    public void getObjects(OSSClient client,String bucketName){
        ObjectListing listing = client.listObjects(bucketName);
        // 遍历所有Object
        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
            System.out.println(objectSummary.getKey());
        }      
    }
    
    // 删除一个Bucket和其中的Objects 
    public static void deleteBucket(OSSClient client, String bucketName)
            throws OSSException, ClientException {

        ObjectListing ObjectListing = client.listObjects(bucketName);
        List<OSSObjectSummary> listDeletes = ObjectListing.getObjectSummaries();
        for (int i = 0; i < listDeletes.size(); i++) {
            String objectName = listDeletes.get(i).getKey();
            // 如果不为空,先删除bucket下的文件
            client.deleteObject(bucketName, objectName);
        }
        client.deleteBucket(bucketName);
    }

    // 把Bucket设置为所有人可读
    public static void setBucketPublicReadable(OSSClient client, String bucketName)
            throws OSSException, ClientException {
        //创建bucket
        client.createBucket(bucketName);

        //设置bucket的访问权限,public-read-write权限
        client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
    }

    // 上传文件 file
    public static void uploadFile(String key, File file) throws OSSException, ClientException, FileNotFoundException {
	// 获取指定文件的输入流
	InputStream content = new FileInputStream(file);
	// 创建上传Object的Metadata
<span style="white-space:pre">	</span> ObjectMetadata meta = new ObjectMetadata();
	 // 必须设置ContentLength
	 meta.setContentLength(file.length());
         meta.setContentType("image/*");
	 client.putObject(bucketName, key, content, meta);
    }	 
    
    // 上传文件 MultipartFile multipartFile
    public static void uploadMultipartFile(String key, MultipartFile multipartFile) throws OSSException, ClientException, FileNotFoundException {

		 try {
			// 获取指定文件的输入流
			 InputStream content = multipartFile.getInputStream();
			 // 创建上传Object的Metadata
			 ObjectMetadata meta = new ObjectMetadata();
			 // 必须设置ContentLength
			 meta.setContentLength(multipartFile.getSize() );
			 meta.setContentType("image/*");
			 client.putObject(bucketName, key, content, meta);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }	 
    
    //生成URL
    public static URL getUrl(String key){
    	URL url = client.generatePresignedUrl(bucketName, key, expiration);
    	return url;
    }
    // 下载文件
    public static void downloadFile(OSSClient client, String bucketName, String key, String fileDownloadPath)
            throws OSSException, ClientException {
        client.getObject(new GetObjectRequest(bucketName, key), new File(fileDownloadPath));
    }
    
  //创建Bucket 里的虚拟文件夹
  	public static void createFileDir(String dir)throws OSSException, ClientException{
  		ensureBucket();
  		try {
  			client.getObject(bucketName, dir);
  		} catch (ServiceException e) {
  			// TODO Auto-generated catch block
  			if(e.getErrorCode().equals("NoSuchKey")){
  				//要创建的文件夹名称,在满足Object命名规则的情况下以"/"结尾
  				  String objectName = dir + "/";
  				  ObjectMetadata objectMeta = new ObjectMetadata();
  				  
  				  /*这里的size为0,注意OSS本身没有文件夹的概念,这里创建的文件夹本质上是一个size为0的Object,dataStream仍然可以有数据   */
  				  byte[] buffer = new byte[0];
  				  ByteArrayInputStream in = new ByteArrayInputStream(buffer);
  				  objectMeta.setContentLength(0);
  				  try {
  					  //创建文件上传目录
  					  client.putObject(bucketName, objectName, in, objectMeta);
  				  }catch(ServiceException se){
  					  System.out.println(se.getErrorCode() + "  " + se.getErrorMessage());
  					  throw e;
  				  }
  				  finally {
  					  try {
  						  in.close();
  					  } catch (IOException ioe) {
  						  // TODO Auto-generated catch block
  						  ioe.printStackTrace();
  					  }
  				  }
  			}
  			
  		}
  		   
      }
    
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值