2017-02-25 81 views
0

下面是我的代码使用文件属性

com.microsoft.azure.storage

库文件上传到在Azure Blob存储

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支持?

回答

2

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

你正在寻找的方法是downloadAttributes()其中返回BlobProperties类型的对象将设置是BlobProperties类型的斑点的属性。它将包含关于blob的信息。你想在那里使用的方法是getLastModified()

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

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

您可以在这里获得有关SDK的详细信息:http://azure.github.io/azure-storage-java/

+0

这是有益的,谢谢。我对上传时间很感兴趣,所以元数据并不是真正需要的,但是要感谢这些信息。小修正:downloadAttributes()的返回类型是void,它不会显式返回BlobProperties类型的对象,尽管在内部情况可能如此。所以你做blob.downloadAttributes();其次是System.out.println(blob.getProperties()。getLastModified()); – saltmangotree

+0

谢谢你指出我的错误。我纠正了我的答案。 –

+0

在我们完成之前还有一个问题 - 我能够获得文件DirA/DirB/file.csv的属性,但无法获得类似的目录属性,比如DirA或DirB。目录是不是blob?我怎样才能获得类似的目录属性? – saltmangotree