Чтение свойств файла в хранилище BLOB-объектов Azure на Java

Ниже приведен мой код для отправки файла в хранилище BLOB-объектов Azure с помощью

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, где, учитывая путь к файлу, загруженному в хранилище BLOB-объектов Azure, он может вернуть мне свойства этого файла, в частности дату и время загрузки.

Есть ли API в Java, который поддерживает это?


person saltmangotree    schedule 25.02.2017    source источник


Ответы (1)


Я ищу API, где, учитывая путь к файлу, загруженному в хранилище BLOB-объектов Azure, он может вернуть мне свойства этого файла, в частности дату и время загрузки.

Вам нужен метод downloadAttributes(), который возвращает объект типа BlobProperties установит свойства большого двоичного объекта типа BlobProperties. Он будет содержать информацию о большом двоичном объекте. Метод, который вы хотели бы использовать, это getLastModified().

Однако это вернет дату/время последнего обновления большого двоичного объекта. Таким образом, если вы создаете большой двоичный объект и не вносите в него никаких изменений, это свойство можно использовать, чтобы узнать, когда он был загружен. Однако, если вы вносите какие-либо изменения в большой двоичный объект после его создания (например, задаете свойства/метаданные и т. д.), возвращаемое значение представляет собой дату/время последнего изменения.

Если вам интересно узнать, когда был создан большой двоичный объект, вы можете сохранить эту информацию в виде настраиваемых метаданных вместе с большим двоичным объектом.

Подробную информацию о пакете SDK можно получить здесь: http://azure.github.io/azure-storage-java/.

person Gaurav Mantri    schedule 25.02.2017
comment
это было полезно, спасибо. Меня интересует время загрузки, поэтому метаданные на самом деле не требовались, однако спасибо за информацию. Небольшое исправление: возвращаемый тип downloadAttributes() — void, он не возвращает объект типа BlobProperties явно, хотя внутренне это может иметь место. Итак, вы делаете blob.downloadAttributes(); затем System.out.println(blob.getProperties().getLastModified()); - person saltmangotree; 25.02.2017
comment
Спасибо, что указали на мою ошибку. Я исправил свой ответ. - person Gaurav Mantri; 25.02.2017
comment
еще один вопрос, прежде чем мы закончим: я могу получить свойства файла DirA/DirB/file.csv, но не могу получить аналогичные свойства для каталогов, скажем, DirA или DirB. Разве каталоги тоже не капли? Как я могу получить аналогичные свойства для каталогов? - person saltmangotree; 26.02.2017
comment
Причина в том, что в больших двоичных объектах Azure нет каталогов. Пожалуйста, ознакомьтесь с моим подробным ответом здесь: чтобы создать пустую папку в хранилище больших двоичных объектов Azure "> stackoverflow.com/questions/26718243/. Если вам нужно использовать каталоги, вам нужно будет использовать Azure Files. ХТН. - person Gaurav Mantri; 26.02.2017
comment
@saltmangotree В хранилище BLOB-объектов Azure существует не настоящая концепция каталога, а виртуальный каталог. Если вы хотите получить свойства виртуального каталога, обратитесь к использованию класса CloudFileDirectory & FileDirectoryProperties пакета SDK службы хранилища Azure для Java. - person Peter Pan; 28.02.2017
comment
@GauravMantri, еще раз спасибо. Извиняюсь за поздний голос - последние пару дней болел. - person saltmangotree; 02.03.2017
comment
Без проблем :). Надеюсь, тебе сейчас лучше! - person Gaurav Mantri; 02.03.2017