首先还是要添加依赖,然后创建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")
然后就把在云端的这个照片
下载到了手机的这个目录中