天天看點

安卓上傳指定目錄的所有txt檔案到阿裡雲oss

1.周遊指定目錄的所有txt檔案

/**
     * 擷取指定目錄内所有檔案路徑
     * @param dirPath 需要查詢的檔案目錄
     * @param _type 查詢類型,比如TXT什麼的
     */
    public JSONArray getAllFiles(String dirPath[], String _type) {
        JSONArray fileList = new JSONArray();
        for(int i= 0 ;i<dirPath.length;i++){
            File f = new File(String.valueOf(getExternalFilesDir(dirPath[i])));
            if (!f.exists()) {//判斷路徑是否存在
                return null;
            }
            File[] files = f.listFiles();
            if(files==null){//判斷權限
                return null;
            }
            for (File _file : files) {//周遊目錄
                if(_file.isFile() && _file.getName().endsWith(_type)){
                    String _name=_file.getName();
                    String filePath = _file.getAbsolutePath();//擷取檔案路徑
//                String fileName = _file.getName().substring(0,_name.length()-4);//擷取檔案名
                    String fileName = _file.getName();//擷取檔案名
//                Log.e("LOGCAT","fileName:"+fileName);
//                Log.e("LOGCAT","filePath:"+filePath);
                    try {
                        JSONObject _fInfo = new JSONObject();
                        _fInfo.put("name", fileName);
                        _fInfo.put("path", filePath);
                        fileList.put(_fInfo);
                    }catch (Exception e){
                    }
                } else if(_file.isDirectory()){//查詢子目錄
//                getAllFiles(_file.getAbsolutePath(), _type);
                } else{
                }
            }
        }

        return fileList;
    }      

2.上傳的實作

/**
     * 
     * @param context
     * @param endpoint 找後端拿
     * @param bucketName 找後端拿
     * @param objectName 這個是要存在oss的檔案名
     * @param uploadFilePath 這個是本地檔案的路徑
     */
    public void UploadFile(Context context,String endpoint, String bucketName, String objectName, final String uploadFilePath) {
        credentialProvider = new OSSAuthCredentialsProvider("https://xxx.cn");//這個找你們後端拿吧,是authServerUrl
        conf = new ClientConfiguration();
        conf.setConnectionTimeout(15 * 1000); // 連接配接逾時,預設15秒
        conf.setSocketTimeout(15 * 1000); // socket逾時,預設15秒
        conf.setMaxConcurrentRequest(5); // 最大并發請求數,預設5個
        conf.setMaxErrorRetry(2); // 失敗後最大重試次數,預設2次
        oss = new OSSClient(context, endpoint, credentialProvider, conf);
        // 構造上傳請求。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, uploadFilePath);
        // 異步上傳時可以設定進度回調。
        putObjectRequest.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                Log.e(TAG, "onProgress: "+currentSize*100/totalSize );
            }
        });
        OSSAsyncTask ossAsyncTask = oss.asyncPutObject(putObjectRequest, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                Log.e(TAG, "onSuccess: "+result );
         
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                // 請求異常。
                if (clientExcepion != null) {
                    // 本地異常,如網絡異常等。
                    clientExcepion.printStackTrace();
                    Log.e("123",clientExcepion+"");
                }
                if (serviceException != null) {
                    // 服務異常。
                    Log.e("123",serviceException+"");
                }
            }

        });
        // ossAsyncTask.cancel(); // 可以取消任務
        ossAsyncTask.waitUntilFinished(); // 等待任務完成
    }      

3.周遊所有指定的目錄下的所有txt檔案,并上傳(随便舉個例子)

private void upload(){
        String file[] = {"PPG","ACC","GYRO","RRI"};//這裡是周遊含有"PPG","ACC","GYRO","RRI"的所有txt檔案
       String  userId = 109;
        JSONArray arrayPPG =getAllFiles(file,".txt");
        for (int i=0;i<arrayPPG.length();i++) {
            try {
                JSONObject jsonObject = (JSONObject) arrayPPG.get(i);
                String path=jsonObject.getString("path");
                String name =jsonObject.getString("name");
                String pathName =jsonObject.getString("name").substring(0,3);//截取路徑的前3個字元
                UploadFile(this,
                        "http://oss-xxx.com",//找你們後端拿
                        "xxx",//桶名,找你們後端拿
                        pathName+"/"+userId+"_"+name,
                        path);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
      
    }      

上傳成功之後的效果:

安卓上傳指定目錄的所有txt檔案到阿裡雲oss
安卓上傳指定目錄的所有txt檔案到阿裡雲oss

對了,别忘了添加oss的依賴哦,這裡我是把它打成aar了

安卓上傳指定目錄的所有txt檔案到阿裡雲oss

就是拿oss上面的demo

安卓上傳指定目錄的所有txt檔案到阿裡雲oss
安卓上傳指定目錄的所有txt檔案到阿裡雲oss
fileTree(dir: 'libs', include: ['*.jar','*.aar'])