【问题标题】:Reading file properties of a file in Azure Blob Store in Java在 Java 中读取 Azure Blob 存储中文件的文件属性
【发布时间】:2017-07-16 03:40:57
【问题描述】:

下面是我使用

将文件上传到 Azure Blob Store 的代码

com.microsoft.azure.storage

图书馆

public class BlobUploader {
    private CloudBlobContainer blobContainer;
    private static Logger LOGGER = LoggerFactory.getLogger(BlobUploader.class);

    /**
     * Constructor of the BlobUploader
     * 
     * @param storageAccountName The storage account name where the files will be uploaded to.
     * @param storageAccountKey The storage account key of the storage account
     * @param containerName The container name where the files will be uploaded to.
     */
    public BlobUploader( String storageAccountName, String storageAccountKey, String containerName ) {

        String storageConnectionString = "DefaultEndpointsProtocol=http;AccountName=" + storageAccountName + ";AccountKey=" + storageAccountKey;

        CloudStorageAccount storageAccount;
        try {
            storageAccount = CloudStorageAccount.parse( storageConnectionString );
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            // Retrieve reference to a previously created container.
            this.blobContainer = blobClient.getContainerReference( containerName );
        } catch ( Exception e ) {
            LOGGER.error( "failed to construct blobUploader", e );
        }
    }

    public void upload( String filePath ) throws Exception {

        // Define the path to blob in the container
        String blobPath = "/uploads";
        File fileToBeUploaded = new File( filePath );
        String fileName = fileToBeUploaded.getName();

        String blobName = blobPath + fileName;

        // Create or overwrite the blob with contents from a local file.
        CloudBlockBlob blob = blobContainer.getBlockBlobReference( blobName );

        System.out.println( "start uploading file " + filePath + " to blob " + blobName );

        blob.upload( new FileInputStream( fileToBeUploaded ), fileToBeUploaded.length() );
        System.out.println( "upload succeeded." );
    }
}

我正在寻找一个 API,如果给定上传到 Azure Blob 存储的文件的文件路径,它可以返回该文件的属性,特别是上传的日期和时间。

Java 中是否有支持此功能的 API?

【问题讨论】:

    标签: java azure azure-blob-storage


    【解决方案1】:

    我正在寻找一个 API,其中,给定上传文件的文件路径 到 Azure Blob 存储,它可以返回该文件的属性, 具体来说,上传的日期和时间。

    您要查找的方法是downloadAttributes(),它返回BlobProperties 类型的对象 将设置BlobProperties 类型的blob 属性。它将包含有关 blob 的信息。你想在那里使用的方法是getLastModified()

    但是,这将返回 blob 上次更新的日期/时间。因此,如果您创建了一个 blob 并且不对其进行任何更改,则可以使用此属性来了解它的上传时间。但是,如果您在创建 blob 后对其进行任何更改(例如设置属性/元数据等),则返回的值是上次更改的日期/时间。

    如果您有兴趣了解 Blob 的创建时间,您可能希望将此信息作为自定义元数据与 Blob 一起存储。

    您可以在此处获取有关 SDK 的详细信息:http://azure.github.io/azure-storage-java/

    【讨论】:

    • 这很有帮助,谢谢。我对上传时间感兴趣,所以元数据并不是真正需要的,但是感谢您提供的信息。小修正:downloadAttributes() 的返回类型为 void,它没有显式返回 BlobProperties 类型的对象,尽管在内部可能是这种情况。所以你做 blob.downloadAttributes();其次是 System.out.println(blob.getProperties().getLastModified());
    • 感谢您指出我的错误。我更正了我的答案。
    • 在我们结束之前再问一个问题 - 我能够获得文件 DirA/DirB/file.csv 的属性,但无法获得目录的类似属性,例如 DirA,或者目录B。目录不也是blob吗?如何获得目录的类似属性?
    • 原因是 Azure Blob 中没有目录。请在此处查看我的详细答案:stackoverflow.com/questions/26718243/…。如果您需要使用目录,则需要使用Azure Files。 HTH。
    • @saltmangotree Azure Blob 存储上没有真正的目录概念,而是虚拟目录。如果要获取虚拟目录的属性,请参考Azure Storage SDK for Java的CloudFileDirectory&FileDirectoryProperties类的用法。
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2021-04-01
    • 2021-07-09
    • 2021-09-03
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多