0

我可以使用以下代码将图像上传到 Azure 文件共享中。

CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
            CloudFileClient cloudFileClient = cloudStorageAccount.CreateCloudFileClient();             
            CloudFileShare fileShare = cloudFileClient.GetShareReference("sampleimage");
           if (await fileShare.CreateIfNotExistsAsync())
            {
                await fileShare.SetPermissionsAsync(
                    new FileSharePermissions
                    {

                    });
            }
            //fileShare.CreateIfNotExists();

            string imageName = Guid.NewGuid().ToString() + "-" + Path.GetExtension(imageToUpload.FileName);
            CloudFile cloudFile = fileShare.GetRootDirectoryReference().GetFileReference(imageName);
            cloudFile.Properties.ContentType = imageToUpload.ContentType;

            await cloudFile.UploadFromStreamAsync(imageToUpload.InputStream);

            imageFullPath = cloudFile.Uri.ToString();
        }
        catch (Exception ex)
        {

        }
        return imageFullPath;

这是我尝试读取文件路径的方式:[插入表之前]

public class ReadFileSharePath
{
    string Path = null;
    public string ReadFilePath()
    {

        try
        {
            CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
            CloudFileClient cloudFileClient = cloudStorageAccount.CreateCloudFileClient();
            CloudFileShare fileShare = cloudFileClient.GetShareReference("sampleimage");
            if (fileShare.Exists())
            {
                CloudFileDirectory rootdir = fileShare.GetRootDirectoryReference();

                CloudFileDirectory sampleDir = rootdir.GetDirectoryReference("sampleimage");

                if (sampleDir.Exists())
                {
                    // Get a reference to the file we created previously.
                    CloudFile file = sampleDir.GetFileReference("90e94676-492d-4c3c-beb2-1d8d48044e4e-.jpg");

                    // Ensure that the file exists.
                    if (file.Exists())
                    {
                        // Write the contents of the file to the console window.
                        //Console.WriteLine(file.DownloadTextAsync().Result);
                        Path = file.DownloadTextAsync().Result.ToString();
                    }
                }
            }

        }
        catch (Exception)
        {

            throw;
        }
        return Path;

    }

}

但是,这个 if 条件

if (sampleDir.Exists())

正在失败。并且,控件没有进入循环。

我想将文件共享的路径存储在 Azure 表存储中。我想获得分区键和行键。如何做到这一点?任何链接或建议会有所帮助吗?谢谢。

4

1 回答 1

1

正如@Gaurav 所说,使用上述代码返回 imageFullPath 后,您可以使用以下代码将路径存储在表存储中。

void SavePath(string fullpath)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            // Create the table client.
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "people" table.
            CloudTable table = tableClient.GetTableReference("people");

            // Create a new customer entity.
            CustomerEntity customer1 = new CustomerEntity("joey", "cai");
            customer1.path = fullpath;


            // Create the TableOperation object that inserts the customer entity.
            TableOperation insertOperation = TableOperation.Insert(customer1);

            // Execute the insert operation.
            table.Execute(insertOperation);
        }
        public class CustomerEntity : TableEntity
        {
            public CustomerEntity(string lastName, string firstName)
            {
                this.PartitionKey = lastName;
                this.RowKey = firstName;
            }

            public CustomerEntity() { }

            public string path { get; set; }

        }

注意:完整路径是您返回的 imageFullPath。

编辑:实体通过使用从 TableEntity 派生的自定义类映射到 C# 对象。要将实体添加到表中,请创建一个定义实体属性的类。

上面的代码定义了一个实体类,它使用客户的名字作为行键,姓氏作为分区键。实体的分区和行键一起在表中唯一标识它。要存储在表中的实体必须是受支持的类型,例如派生自TableEntity类。

上面的代码显示了CloudTable对象的创建,然后是一个CustomerEntity对象。为了准备操作,创建了一个TableOperation对象以将客户实体插入到表中。最后通过调用来执行操作CloudTable.Execute

更多细节,你可以参考这篇文章

更新:

据我了解,行和分区键是唯一的,因此是错误的。

因此,当您将第二个实体插入表中时,它使用相同的分区键和行键。因此,您可以保持分区键相同并更改行键值。将以下代码更改为上述代码:

CustomerEntity customer1 = new CustomerEntity("joey", "cai"+Guid.NewGuid());
customer1.path = fullpath;
TableOperation insertOperation = TableOperation.Insert(customer1);
table.Execute(insertOperation);
于 2018-05-01T09:23:54.267 回答