在阿里云oss上批量下载文件

本文介绍如何使用Java从阿里云OSS批量下载文件到本地。通过遍历查询数据库获取待下载文件名,利用OSSClient进行文件是否存在判断及下载操作,实现自动化批量下载。涉及OSSClient初始化、文件下载及异常处理。

@RequestMapping(value="/ossDown",method=RequestMethod.POST)
    public void ossDown(HttpServletRequest request) {
        
        
        List<SpartaSubmitSubject> listS=ossService.queryOss();
        String [] str=new String[listS.size()];
        for(int x=0;x<listS.size();x++) {
            String value=listS.get(x).getStudentId()+"_"+listS.get(x).getPaperId()+"_"+listS.get(x).getSubjectId()+"_manage.db";
            str[x]=value;
        }
        
    
        String endpoint="oss-cn-beijing.aliyuncs.com";
        String accessKeyId = "xxx";
        String accessKeySecret = "xxx";
        String bucketName = "xxx";
        
        
        String key1="20180914/formal/answer";
        String key="";
        for(int x=0;x<listS.size();x++) {
            key=key1+"/"+str[x];   // 路径加数据库查询出来出来对应的名字,
            
            downDir = LogUtil.getDownloadPath(request);//得到的servlet容器跟目录
            String dowDirFile = downDir+"/" +"ossDownload";
            File dowFile = new File(dowDirFile);
            if(!dowFile.exists()){
                dowFile.mkdirs();
            }  
            String localUrl=dowDirFile+"/"+str[x];//下载后保存本地路径(

          重点########:加上需要存的名字
            
    
            OSSClient client = null;
            try {
                client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
                if(client.doesObjectExist(bucketName, key)){//如果文件存在在下载
                
                    long startTime_d = System.currentTimeMillis();  
                    download(client, bucketName, key, localUrl);
                    long endTime_d = System.currentTimeMillis();
                    System.out.println("下载花费时间约:" + (endTime_d - startTime_d) + " ms");  
                    
                }else{
                    System.out.println(key+"下载失败不存在");
                    
                }
            } catch (Throwable e) {
                System.out.println("cuowu");
                e.printStackTrace();
                
            } finally{
                System.out.println("fina");
                if(null != client) {
                    client.shutdown();
                }
            }
        }
        
    }
        
    
           // 下载文件  具体方法
        private static void download(OSSClient client, String bucketName,  
                String key, String filename) throws Throwable {  
            try {
                client.getObject(new GetObjectRequest(bucketName, key), new File(filename));
                
            } finally {
                if (client != null) {
                    client.shutdown();
                }
            }  
        
        
        
    }

    

public static String getDownloadPath(HttpServletRequest request) {
        String rootDir = request.getSession().getServletContext().getRealPath("/");
        System.out.println(rootDir);
        String separator=System.getProperty("file.separator");
          
        File folder = new File(rootDir+separator+"20180915dbForDownLoad");
        if(!folder.exists() && !folder.isDirectory()){
            folder.mkdirs();
        }  
        
        String downDir = folder.getAbsolutePath();
        return downDir;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端从入门到精通

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值