从 Azure 存储下载后如何解码解码文件?

How to decode decoded files after downloading from Azure Storage?

我正在尝试通过 Java 的 Azure 存储 SDK 下载后解码文件。

这是我的代码:

try
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            CloudBlobContainer container = blobClient.getContainerReference("mycontainer");
            CloudBlobDirectory blobDirectory = container.getDirectoryReference("shi");
            for (ListBlobItem blobItem : blobDirectory.listBlobs()) {
                if (blobItem instanceof CloudBlob) {
                    CloudBlob blob = (CloudBlob) blobItem;
                    blob.download(new FileOutputStream("/Users/shi/Downloads/" + blob.getName()));
                }
            }
        }

此代码从 mycontainer 下载所有 BLOB 文件,但这些文件已编码。我如何才能以解码形式下载它们。

我试图重现你的问题。

我的示例代码:

CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("jay");
   for (ListBlobItem blobItem : container.listBlobs()) {
        if (blobItem instanceof CloudBlob) {
            CloudBlob blob = (CloudBlob) blobItem;
            blob.download(new FileOutputStream("E://AzureFile/" + blob.getName()));

下载成功:

您可以先在存储资源管理器中查看 blob 内容类型是否为 text/plain。门户网站上未显示 Blob 特定内容类型。

此外,可能是因为您解析 blob 内容时使用的编码与上传 blob 时您的同事使用的编码不一致。

下载文本时遇到此问题,但二进制文件不会。

我建议您在上传文件时获取编码并设置字符集以使用以下代码示例片段解析 blob 内容:

if (blobItem instanceof CloudBlob) {
      CloudBlob blob = (CloudBlob) blobItem;
      InputStream input =  blob.openInputStream();
      InputStreamReader inr = new InputStreamReader(input, "UTF-8");
      String utf8str = org.apache.commons.io.IOUtils.toString(inr);
      System.out.println(utf8str);
}

希望对你有帮助。

我解决了:

public static int convertAvro(String avroFile) throws Exception {

    PrintStream out = new PrintStream(System.out);
    GenericDatumReader<Object> reader=new GenericDatumReader<Object>();
    org.apache.avro.file.FileReader<Object>  fileReader=  DataFileReader.openReader(new File(avroFile),reader);
      try {
        Schema schema=fileReader.getSchema();
        // System.out.print(schema);
        DatumWriter<Object> writer=new GenericDatumWriter<Object>(schema);
        JsonEncoder encoder=EncoderFactory.get().jsonEncoder(schema,out);
        for (Object datum : fileReader)     writer.write(datum,encoder);
        encoder.flush();
        out.println();
        out.flush();
      }
      finally {
        fileReader.close();
      }
      return 0;
}