问题描述
我知道有类似的问题,但没有一个对我有用。 我正在尝试从 Azure 存储下载文件。但我收到错误消息,错误消息是指定的 blob 不存在。但是 blob 确实存在并且我的连接字符串也有效。我在下面分享我的代码。 如果有人可以帮助我,那会很有帮助。
代码:
public void downloadFile(ShowContentInfo showContentInfo){
ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executor.execute(() ->{
CloudStorageAccount storageAccount = null;
try {
String dir = "/storage/emulated/0/Download/LmsContents/";
if (!dt.file.folderExists(dir)) {
dt.file.createFolder(dir);
}
storageAccount = CloudStorageAccount.parse(CONNECTION_STRING);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("containerName");
CloudBlockBlob blockBlob = container.getBlockBlobReference("rblobName");
File file = new File("/storage/emulated/0/Download/LmsContents/" + showContentInfo.getContentTitle());
blockBlob.downloadToFile("/storage/emulated/0/Download/LmsContents/" + showContentInfo.getContentTitle());
} catch (URISyntaxException e) {
e.printstacktrace();
} catch (InvalidKeyException e) {
e.printstacktrace();
} catch (StorageException e) {
e.printstacktrace();
} catch (IOException e) {
e.printstacktrace();
}
handler.post(() -> {
Toast.makeText(context,"Successful",Toast.LENGTH_SHORT).show();
});
});
}
解决方法
一个可能的原因是您的 blob file
不直接位于 container
之下。请通过 azure 门户签入 azure 存储,查看 blob file
是否在 subfolders
内的某个 container
下。
如果是(例如blob文件是b.txt
,容器名称是container111
,子文件夹名称是sub111
),那么你应该修改这行代码
CloudBlockBlob blockBlob = container.getBlockBlobReference("rblobName");
到
CloudBlockBlob blockBlob = container.getBlockBlobReference("sub111\b.txt");
另外,请检查连接字符串是否正确。
,检查文件夹引用,您提供的文件夹结构似乎不正确。调试时看url正确与否。