Xamarin текстовый блоб хранилище Azure - PullRequest
0 голосов
/ 20 мая 2018

Я использую хранилище BLOB-объектов Azure для хранения изображения и пытаюсь отобразить его в своем приложении Xamrin.form.Я нашел простой учебник и код на github.

Мне удалось реализовать его, выполнив шаги и создать учетную запись на BLOB-объекте хранилища Azure.

Проблема в том, что я могуувидеть имя файла, но не «изображение»

вот ошибка:

read started: <Thread Pool> #9
[0:] HTTP Request: Could not retrieve https://xxxxxx.blob.core.windows.net/yyyy/kakashi.jpg, status code NotFound
[0:] ImageLoaderSourceHandler: Could not retrieve image or image data was invalid: Uri: https://lxxxxxx.blob.core.windows.net/yyyy/kakashi.jpg
Thread finished: <Thread Pool> #4

вот учебник: нажмите, чтобы увидеть

Вот Github: нажмите, чтобы увидеть

Вот вывод на экране: enter image description here

, и у меня появляется эта ошибка, когдаЯ положил Urlof изображения (https://lxxxxxx.blob.core.windows.net/yyyy/kakashi.jpg) на мой бронзер:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>ResourceNotFound</Code>
<Message>
The specified resource does not exist. RequestId:97933c69-a01e-014f-6669-f0502e000000 Time:2018-05-20T18:33:28.4774584Z
</Message>
</Error>

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

1.Пожалуйста, сначала проверьте свою подписку.

2. Проверьте политику доступа вашего контейнера.enter image description here

3. Вот шаги для сохранения и получения больших двоичных объектов с помощью кода.

1) Используя NuGet, мы можем установить необходимыеСборка пакетов.Перейдите в «Управление пакетом для меню решений» и найдите WindowsAzure.Storage и WindowsAzure.ConfigurationManager и нажмите «Установить».

2) Получить ключи доступа в конфигурации.enter image description here

3) Пример кода для создания BLOB-объекта с помощью кода:

 public async Task<string> SaveImagesToAzureBlob(HttpPostedFileBase imageToUpload)
    {
        try
        {
            CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
            CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("sampleimage");

            if (await cloudBlobContainer.CreateIfNotExistsAsync())
            {
                await cloudBlobContainer.SetPermissionsAsync(
                    new BlobContainerPermissions
                    {
                        PublicAccess = BlobContainerPublicAccessType.Blob
                    }
                    );
            }

            string imageFullPath = null;
            string imageName = Guid.NewGuid().ToString() + "-" + Path.GetExtension(imageToUpload.FileName);

            CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(imageName);
            cloudBlockBlob.Properties.ContentType = imageToUpload.ContentType;
            await cloudBlockBlob.UploadFromStreamAsync(imageToUpload.InputStream);

            imageFullPath = cloudBlockBlob.Uri.ToString();
            return imageFullPath;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Теперь, проверьте свою учетную запись хранения, вы можете увидеть созданный образец контейнера.

По умолчанию контейнер будет закрытым, никто не сможет получить доступ извне.Чтобы установить разрешения, мы должны использовать метод SetPermission, как показано ниже.

CloudBlobContainer .SetPermissions (new BlobContainerPermissions {PublicAccess = BlobContainerPublicAccessType.Blob});
Пожалуйста, попробуйте другие разрешения в списке.

Обратите внимание на настройки уровня разрешения. В вашем случае это может вызвать проблему.

Для более подробной информации: Ссылка

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-deployment-model https://docs.microsoft.com/en-us/azure/storage/blobs/storage-dotnet-how-to-use-blobs

0 голосов
/ 21 мая 2018

Ошибка означает, что вы не установили Public access level на Blob.

См. Это требование в вашем уроке.enter image description here

Код, который вы используете, требует этой настройки, поскольку он напрямую обращается к BLOB-объекту с помощью BLOB-объекта Uri.

См. PhotosBlobStorageService.cs

return blobList.Select(x => new PhotoModel { Title = x.Name, Uri = x.Uri }).ToList();

Если вы хотите сохранить Private уровень, вы должны внести некоторые изменения в приведенное выше утверждение.Вот ссылка.

return blobList.Select(x => new PhotoModel { Title = x.Name,
            Uri = new Uri(x.Uri+x.GetSharedAccessSignature(
                new SharedAccessBlobPolicy {
                    Permissions = SharedAccessBlobPermissions.Read|SharedAccessBlobPermissions.Write,
                    // you can modify the expiration to meet your requirement
                    SharedAccessExpiryTime = DateTime.UtcNow.AddYears(1)
                } ))
        }).ToList();

Это изменение позволяет вам посещать приватные BLOB-объекты с SAS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...