软件设计扛把子-oss下载图片使用手册

首先还是要添加依赖,然后创建OssDownload 类

import android.content.Context;
import android.os.Environment;
import android.util.Log;
import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
import com.alibaba.sdk.android.oss.model.GetObjectRequest;
import com.alibaba.sdk.android.oss.model.GetObjectResult;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class OssDownload {
    
    
    //private static OSS oss = ;
    public void downLoadFile(String name, final Context context,final String localName) {
    
    

        OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(ID,KEY);
        ClientConfiguration conf = new ClientConfiguration();
        OSS oss = new OSSClient(context, "http://oss-cn-beijing.aliyuncs.com", credentialProvider, conf);

        // 构造下载文件请求。
        GetObjectRequest get = new GetObjectRequest("bucket-ljh", name);
        OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
    
    
            @Override
            public void onSuccess(GetObjectRequest request, GetObjectResult result) {
    
    
                // 请求成功。
                //Log.d("asyncGetObject", "DownloadSuccess");
                //Log.d("Content-Length", "" + result.getContentLength());
                InputStream inputStream = result.getObjectContent();
                byte[] buffer = new byte[2048];
                int len;
                File file=null;
                try {
    
    
                    //is = response.body().byteStream();
                    file= new File(context.getExternalCacheDir(),localName);
                    if (!file.exists()) {
    
    
                        file.createNewFile();
                    }

                    FileOutputStream fos = new FileOutputStream(file);
                    BufferedInputStream bis = new BufferedInputStream(inputStream);
                    while ((len = bis.read(buffer)) != -1) {
    
    
                        // 您可以在此处编写代码来处理下载的数据
                        fos.write(buffer, 0, len);
                        fos.flush();
                    }
                    fos.close();
                    bis.close();
                    inputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }

            @Override
            // GetObject请求成功,将返回GetObjectResult,其持有一个输入流的实例。返回的输入流,请自行处理。
            public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
    
    
                // 请求异常。
                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());
                }
            }
        });
         //task.cancel(); // 可以取消任务。
        //task.waitUntilFinished(); // 等待任务完成。
    }
}

这个类还是只有一个方法,即downLoadFile方法,里面有三个参数。第一个是图片在云端的名称,如果在文件夹里面,就用 文件夹名/文件名,比如Eliminate_holidays/myImg.jpg。第二个参数是上下文,在MainActivity中传入this即可。第三个参数是保存到本地的图片名称。
比如我这里使用一下

var ossDown = OssDownload()
ossDown.downLoadFile("myImg.jpg",this,"myFirstImg.png")

然后就把在云端的这个照片
在这里插入图片描述
下载到了手机的这个目录中
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/afdafvdaa/article/details/110393182