阿里雲上傳圖片工具類

簡單粗暴,代碼拷貝即可使用

public class OssManager {

    /**
     * Created by Administrator on 2017/3/1.
     */
    private picResultCallback callback;//回調接口
    private OSS oss;
    private Context contexts;

    public static OssManager getInstance() {
        return OssInstance.instance;
    }

    private static class OssInstance {
        private static final OssManager instance = new OssManager();
    }

    private OssManager() {
    }

    private String bucketName;
    private String accessKeyId;
    boolean isok = false;

    /**
     * 初始化
     *
     * @param context
     * @param endpoint        
     * @param bucketName      
     * @param accessKeyId
     * @param accessKeySecret
     * @param token
     * @param callback
     * @return
     */
    public OssManager init(Context context, String endpoint, String bucketName,
                           String accessKeyId, String accessKeySecret, String token,
                           picResultCallback callback) {
        if (oss == null) {
            Log.i("eeee", "11111");
//                OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
            Log.e("TAG", "accessKeyId=" + accessKeyId);
            Log.e("TAG", "accessKeySecret=" + accessKeySecret);
            Log.e("TAG", "token=" + token);
            OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, token);
//                try {
//                    OSSFederationToken federationToken = credentialProvider.getFederationToken();
//                } catch (ClientException e) {
//                    e.printStackTrace();
//                }
            ClientConfiguration conf = new ClientConfiguration();
            conf.setConnectionTimeout(15 * 1000); // 連接超時,默認15秒
            conf.setSocketTimeout(15 * 1000); // socket超時,默認15秒
            conf.setMaxConcurrentRequest(5); // 最大併發請求書,默認5個
            conf.setMaxErrorRetry(2); // 失敗後最大重試次數,默認2次

            OSSClient ossClient = new OSSClient(context, endpoint, credentialProvider, conf);
            oss = ossClient;
//                ossClient.generatePresignedUrl
//                OSS oss = new OSSClient( context,endpoint, credentialProvider, endpoint);
            Log.e("aaaaaa", "初始化完畢");
            OSSLog.enableLog();
        }
        this.bucketName = bucketName;
        this.accessKeyId = accessKeyId;
        this.callback = callback;
        this.contexts = context;
        return OssInstance.instance;
    }


    private OSSBean RequestToken() {
        OSSBean ossBean = null;

        return ossBean;

    }

    public OSS getOss() {
        return oss;
    }

    /**
     * 普通上傳,比如image
     **/
    OSSAsyncTask task;

    public void upload(String name, String filePath, final int type, final picResultCallback callback) {
        // 構造上傳請求
        PutObjectRequest put = new PutObjectRequest(bucketName, name + ".jpg", filePath);

        // 異步上傳時可以設置進度回調
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                LogUtils.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
            }
        });
        task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                callback.getPicData(true, type);
                // 只有設置了servercallback,這個值纔有數據
                String serverCallbackReturnJson = result.getServerCallbackReturnBody();
                LogUtils.e("oss_upSucceed", serverCallbackReturnJson);
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {

                LogUtils.e("oss_上傳失敗");
                // 請求異常
                if (clientExcepion != null) {
                    // 本地異常如網絡異常等
                    clientExcepion.printStackTrace();

                    LogUtils.e("oss_上傳失敗message", clientExcepion.getMessage());
                }
                if (serviceException != null) {
                    LogUtils.e("oss_上傳失敗code", serviceException.getErrorCode()
                            + "\n<-->" + serviceException.getRequestId()
                            + "\n<-->" + serviceException.getHostId()
                            + "\n<-->" + serviceException.getRawMessage());
 
                }

            }
        });
        // task.cancel(); // 可以取消任務

        task.waitUntilFinished(); // 可以等待直到任務完成
    }


    /**
     * 普通上傳,比如image
     **/

    public void upload2(Bundle bundle, byte[] bytes) {
        String name = bundle.getString("name");
        int count = 0;
        Log.e("aaaaname", name + ":" + bytes);
        // 構造上傳請求
        PutObjectRequest put = new PutObjectRequest(bucketName, name + ".jpg", bytes);

        // 異步上傳時可以設置進度回調
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {

            }
        });
        task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                int statusCode = result.getStatusCode();

                Log.e("aaaaa2a", "result");
                callback.getPicData2(true, 0);

            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                Log.e("aaaaaa", "onFailure");
//                    Log.e("aaaaaa",clientExcepion.getMessage());
                Log.e("aaaaaa", serviceException.getErrorCode());
                Log.e("aaaaaa", request.getBucketName());
                Log.e("aaaaaa", request.getUploadFilePath());

                // 請求異常
                if (clientExcepion != null) {
                    // 本地異常如網絡異常等
                    clientExcepion.printStackTrace();
                    Log.e("aaaa", clientExcepion.getMessage());
                }
                if (serviceException != null) {
                    // 服務異常
                    Log.e("aaaaErrorCode", serviceException.getErrorCode());
                    Log.e("aaaaRequestId", serviceException.getRequestId());
                    Log.e("aaaaHostId", serviceException.getHostId());
                    Log.e("aaaaRawMessage", serviceException.getRawMessage());
                }

            }
        });
        // task.cancel(); // 可以取消任務

        task.waitUntilFinished(); // 可以等待直到任務完成
    }


    public boolean image(String name, String filePath, final List<String> addIm, final List<String> compareList) {
        Log.e("TAG", "name" + name);
//            PutObjectRequest put = new PutObjectRequest(bucketName, "<objectKey>", "<uploadFilePath>");
        PutObjectRequest put = new PutObjectRequest(bucketName, name + ".jpg", filePath);

// 異步上傳時可以設置進度回調
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
            }
        });
        if (oss == null) {


        }
        OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                Log.e("PutObject", "UploadSuccess");
                Log.e("ETag", result.getETag());
                Log.e("RequestId", result.getRequestId());
                Log.e("UploadFilePath", request.getUploadFilePath());
                Log.e("code", result.getStatusCode() + "");
                Log.e("resultBody", result.getServerCallbackReturnBody());
                compareList.add("1");


            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                Log.e("aaaaaa", "onFailure");
                isok = false;
                Log.e("aaaaaa", request.getBucketName());
                // 請求異常
                if (clientExcepion != null) {
                    // 本地異常如網絡異常等
                    clientExcepion.printStackTrace();
                }
                if (serviceException != null) {
                    // 服務異常
                    Log.e("ErrorCode", serviceException.getErrorCode());
                    Log.e("RequestId", serviceException.getRequestId());
                    Log.e("HostId", serviceException.getHostId());
                    Log.e("RawMessage", serviceException.getRawMessage());
                }
            }
        });
        return isok;
    }


    /**
     * 分片上傳
     **/
    public void pullFP(String filePath, String name) throws ClientException, ServiceException {
        String uploadId;
        InitiateMultipartUploadRequest init = new InitiateMultipartUploadRequest(bucketName, name);
        InitiateMultipartUploadResult initResult = oss.initMultipartUpload(init);
        uploadId = initResult.getUploadId();
        long partSize = 128 * 1024; // 設置分片大小
        int currentIndex = 1; // 上傳分片編號,從1開始

        File uploadFile = new File(filePath); // 需要分片上傳的文件

        InputStream input = null;
        try {
            input = new FileInputStream(uploadFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        long fileLength = uploadFile.length();
        long uploadedLength = 0;
        List<PartETag> partETags = new ArrayList<PartETag>(); // 保存分片上傳的結果
        while (uploadedLength < fileLength) {
            int partLength = (int) Math.min(partSize, fileLength - uploadedLength);
            byte[] partData = new byte[0]; // 按照分片大小讀取文件的一段內容
            try {
                partData = IOUtils.readStreamAsBytesArray(input, partLength);
            } catch (IOException e) {
                e.printStackTrace();
            }
            UploadPartRequest uploadPart = new UploadPartRequest(bucketName, name, uploadId, currentIndex);
            uploadPart.setPartContent(partData); // 設置分片內容
            UploadPartResult uploadPartResult = null;
            try {
                uploadPartResult = oss.uploadPart(uploadPart);
            } catch (ClientException e) {
                e.printStackTrace();
            } catch (ServiceException e) {
                e.printStackTrace();
            }
            partETags.add(new PartETag(currentIndex, uploadPartResult.getETag())); // 保存分片上傳成功後的結果
            uploadedLength += partLength;
            currentIndex++;
            Log.e("currentIndex", currentIndex + "");
        }

        CompleteMultipartUploadRequest complete = new CompleteMultipartUploadRequest(bucketName, name, uploadId, partETags);
        final CompleteMultipartUploadResult completeResult = oss.completeMultipartUpload(complete);
        complete.setCallbackParam(new HashMap<String, String>() {
            {

                Log.e("uploadEnd", "uploadEnd");
                Log.e("multipartUpload", "multipart upload success! Location: " + completeResult.getLocation());
                put("callbackUrl", "<server address>");
                put("callbackBody", "<test>");
            }
        });

        ListPartsRequest listParts = new ListPartsRequest(bucketName, name, uploadId);

        ListPartsResult result = oss.listParts(listParts);

        for (int i = 0; i < result.getParts().size(); i++) {
            Log.e("已上傳分片", "partNum: " + result.getParts().get(i).getPartNumber());
            Log.e("已上傳分片", "partEtag: " + result.getParts().get(i).getETag());
            Log.e("已上傳分片", "lastModified: " + result.getParts().get(i).getLastModified());
            Log.e("已上傳分片", "partSize: " + result.getParts().get(i).getSize());
        }

    }

    public interface picResultCallback {
        void getPicData(boolean b, int type);

        void getPicData2(boolean b, int type);
    }
}

使用方法:

首先,先請求你公司得阿里雲庫地址獲取AccesskeyId,AccessKeySecret,SecuityToken這些東西,然後進行init操作

Gson gson = new Gson();
OSSBean s = gson.fromJson(data, OSSBean.class);
String accessKeyId = s.getAccessKeyId();
String accessKeySecret = s.getAccessKeySecret();
String securityToken = s.getSecurityToken();
String bucketName = "invest01";

OssManager.getInstance().init(IdentityInfoNewActivity.this, CN, bucketName, accessKeyId, accessKeySecret, securityToken, new OssManager.picResultCallback() {
    @Override
    public void getPicData(boolean b, int type) {

    }

    @Override
    public void getPicData2(boolean b, int type) {

    }
});

這裏貼出一個OssBean類,便於操作

public class OSSBean {



    private String StatusCode;
    private String AccessKeyId;
    private String AccessKeySecret;
    private String SecurityToken;
    private String Expiration;

    public String getStatusCode() {
        return StatusCode;
    }

    public void setStatusCode(String StatusCode) {
        this.StatusCode = StatusCode;
    }

    public String getAccessKeyId() {
        return AccessKeyId;
    }

    public void setAccessKeyId(String AccessKeyId) {
        this.AccessKeyId = AccessKeyId;
    }

    public String getAccessKeySecret() {
        return AccessKeySecret;
    }

    public void setAccessKeySecret(String AccessKeySecret) {
        this.AccessKeySecret = AccessKeySecret;
    }

    public String getSecurityToken() {
        return SecurityToken;
    }

    public void setSecurityToken(String SecurityToken) {
        this.SecurityToken = SecurityToken;
    }

    public String getExpiration() {
        return Expiration;
    }

    public void setExpiration(String Expiration) {
        this.Expiration = Expiration;
    }
}

然後init完畢,對圖片進行upload:

//10086是阿里雲傳完圖片的回調給你的用來區分的標誌位,我瞎寫的

OssManager.getInstance().upload(slicingTime , path, 10086, new OssManager.picResultCallback() {
            @Override
            public void getPicData(boolean b, int type) {
                //圖片拼接路徑
                String lujing = "https://你的bucketName.oss-cn-beijing.aliyuncs.com/" + slicingTime + ".jpg";
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //上傳圖片給後臺
                        upLoadImage(urlpath);
                    }
                });
            }

            @Override
            public void getPicData2(boolean b, int type) {

            }

        });

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章