指定的 blob 不存在 - 从 Android 下载 Azure 存储文件

问题描述

我知道有类似的问题,但没有一个我有用。 我正在尝试从 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正确与否。