使用法语文件名从 Azure Blob 存储下载文件

Dowload files from Azure Blob Storage with French filename

我正在使用 Java SDK 连接到 Azure Blob 存储:

@Bean
@SneakyThrows
public CloudBlobContainer sourceContainer(CloudStorageAccount cloudStorageAccount) {
    return cloudStorageAccount
            .createCloudBlobClient()
            .getContainerReference(sourceContainerName);
}

在下载过程中,我正在使用 listBobs 和必要的 CloudBlockBlob

它存在于 blob 列表中。然后我尝试下载它:

blob.downloadToFile(path);
blob.delete();

它失败并出现错误:

Method threw 'com.microsoft.azure.storage.StorageException' exception.
The specified blob does not exist.

有趣的是,当我重命名 blob 以删除法语重音字母时,它按预期工作。但我无法从服务器端解决它。我无法使用没有法语重音字母的文件名复制到 blob,因为 CloudBlockBlob 上的每个操作都失败并显示 404 HTTP 代码

我用 azure-storage 5.0.0 测试,它可以下载名称为 associé.txt 的文件。也许你可以用我的代码试试或者提供更多信息让我测试一下。

    final String storageConnectionString ="connectionstring";

    CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);

    CloudBlobClient serviceClient = account.createCloudBlobClient();

    CloudBlobContainer container = serviceClient.getContainerReference("test");
    container.createIfNotExists();

    File file = new File("E:\Test");
    for(ListBlobItem item : container.listBlobs()){
        CloudBlockBlob cloudBlob = (CloudBlockBlob) item;
        File f = new File(file.getAbsolutePath() + "\" +cloudBlob.getName() );
        cloudBlob.downloadToFile(f.toString());
        System.out.println(cloudBlob.getName()+" success download");
    }