Microsoft.Azure.StorageException: указанное имя ресурса содержит недопустимые символы - PullRequest
0 голосов
/ 07 октября 2019

Я создаю хранилище BLOB-объектов для загрузки файла с локального пути в облако. При использовании учетной записи хранения, которую я создал на портале, я получаю сообщение об ошибке: Microsoft.Azure.Storage.StorageException:The specified resource name contains invalid characters. Вот мой код ниже того, что я пытаюсь достичь. Чего не хватает? Пожалуйста, совет

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage;
using System.IO;

namespace BlobStorageApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Azure Blob Storage - Net");
            Console.WriteLine();

            ProcessAsync().GetAwaiter().GetResult();
        }

        private static async Task ProcessAsync()
        {
            CloudStorageAccount storageAccount = null;
            CloudBlobContainer cloudBlobContainer = null;
            string sourceFile = null;
            string destinationFile = null;

            string storageConnectionString = "DefaultEndpointsProtocol=https;" +
                "AccountName=gcobanistorage;" +
                "AccountKey=****;" +
                "EndpointSuffix=core.windows.net";

            if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
            {
                try
                {
                    CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();

                    cloudBlobContainer = cloudBlobClient.GetContainerReference("Test" + Guid.NewGuid().ToString());
                    await cloudBlobContainer.CreateAsync();
                    Console.WriteLine("Created container '{0}'", cloudBlobContainer.Name);
                    Console.WriteLine();

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

                    string localPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    string localFileName = "Test.txt" + Guid.NewGuid().ToString() + "test_.txt";
                    sourceFile = Path.Combine(localPath, localFileName);

                    File.WriteAllText(sourceFile,"Good day, how are you!!?");
                    Console.WriteLine("Temp file = {0}", sourceFile);
                    Console.WriteLine("Uploading to Blob storage as blob {0}", localFileName);

                    CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(localFileName);
                    await cloudBlockBlob.UploadFromFileAsync(sourceFile);

                    Console.WriteLine("Listing blobs in container.");
                    BlobContinuationToken blobContinuationToken = null;

                    do
                    {
                        var resultSegment = await cloudBlobContainer.ListBlobsSegmentedAsync(null, blobContinuationToken);
                        blobContinuationToken = resultSegment.ContinuationToken;
                        foreach (IListBlobItem item in resultSegment.Results) {
                            Console.WriteLine(item.Uri);
                        }
                    } while (blobContinuationToken != null);
                      Console.WriteLine();

                        destinationFile = sourceFile.Replace("test_eNtsa.txt", "Rest.txt");
                        Console.WriteLine("Downloading blob to {0}", destinationFile);
                        Console.WriteLine();

                        await cloudBlockBlob.DownloadToFileAsync(destinationFile, FileMode.Create);

                }
                catch(StorageException ex)
                {
                    Console.WriteLine("Error returned from the service:{0}", ex.Message);
                }
                finally
                {
                    Console.WriteLine("Press any key to delete the sample files and example container");
                    Console.ReadLine();
                    Console.WriteLine("Deleting the container and any blobs in contains");

                    if(cloudBlobContainer != null)
                    {
                        await cloudBlobContainer.DeleteIfExistsAsync();
                    }
                    Console.WriteLine("Deleting the local source file and local downloaded files");
                    Console.WriteLine();
                    File.Delete(sourceFile);
                    File.Delete(destinationFile);
                }
            }
            else
            {
                Console.WriteLine("A connection string has not been defined in the system environment variables." 
                 + "Add a environment variable named 'storageconnectionstring' with your storage" 
                 + "connection string as a value");
            }
        }

        }
    }                     

Привет, команда, есть ли помощник, который может мне помочь, поскольку я получаю это исключение? Чего не хватает в решении? Учетная запись хранения была создана на портале, и я использую строку подключения с портала, контейнер также был создан. Что-нибудь, что я должен быть в состоянии добавить или изменить? В чем может быть причина этой ошибки? я просто хочу понять это, может быть, я называю недопустимое имя в моей «connectionString»? Или, пожалуйста, предоставьте мне некоторую идею об этом, так как я застрял в этой проблеме в течение 1 дня без помощи интернета. Обратная связь может быть высоко оценена и руководство, спасибо, я с нетерпением жду более подробной информации по этой проблеме.

1 Ответ

0 голосов
/ 07 октября 2019

Кажется, что ваше имя контейнера или строка подключения неверны.

Имя контейнера должно быть действительным DNS-именем, соответствующим следующим правилам именования: Имена контейнеров должны начинаться с буквы или цифры и могутсодержать только буквы, цифры и тире (-)Каждому символу тире (-) должен предшествовать сразу же после буквы или цифры;последовательные тире не допускаются в именах контейнеров. Все буквы в имени контейнера должны быть строчными. Имена контейнеров должны быть длиной от 3 до 63 символов.

Пожалуйста, обратитесь к документации по Container naming convention

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