Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的容器不存在_C#_Visual Studio 2010_Azure_Blob_Azure Storage - Fatal编程技术网

C# 指定的容器不存在

C# 指定的容器不存在,c#,visual-studio-2010,azure,blob,azure-storage,C#,Visual Studio 2010,Azure,Blob,Azure Storage,我被此错误所困扰指定的容器不存在。 让我解释一下 CloudBlobClient blobStorage = GetBlobStorage("upload"); CloudBlockBlob blob = BlobPropertySetting(blobStorage, Guid.NewGuid().ToString().ToLower() + Path.GetExtension(file.FileName)); blob.UploadFromStream(file.InputStream);

我被此错误所困扰
指定的容器不存在。

让我解释一下

CloudBlobClient blobStorage = GetBlobStorage("upload");
CloudBlockBlob blob = BlobPropertySetting(blobStorage, Guid.NewGuid().ToString().ToLower() + Path.GetExtension(file.FileName));
blob.UploadFromStream(file.InputStream);

public static CloudBlobClient GetBlobStorage(string cloudBlobContainserName)
    {
        CloudBlobClient blobStorage;
        try
        {
            var storageAccount = CloudStorageAccount.FromConfigurationSetting("StorageConnectionString");
            blobStorage = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = blobStorage.GetContainerReference(cloudBlobContainserName); 
            container.CreateIfNotExist();
            var permissions = container.GetPermissions();
            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            container.SetPermissions(permissions);
        }
        catch (Exception ex)
        {
            Logger.LogError(Log4NetLogger.Category.Exception, "Error in : BlobHandler.GetBlobStorage :>> Exception message: " + ex.Message);
            throw;
        }
        return blobStorage;
    }
    public static CloudBlockBlob BlobPropertySetting(CloudBlobClient cloudBlobClientReferenceName, string blobContentName)
    {
        CloudBlockBlob blob = cloudBlobClientReferenceName.GetBlockBlobReference(blobContentName);


        return blob;
    }
我的
StorageConnectionString

      <Setting name="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=duw;AccountKey=bla bla" />

容器“上载”和存储帐户“duw”存在

执行
blob.UploadFromStream(file.InputStream)语句导致错误

堆栈跟踪:

在Microsoft.WindowsAzure.StorageClient.Tasks.Task
1.get_Result()上
在Microsoft.WindowsAzure.StorageClient.Tasks.Task上执行
位于Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImpl(Func`1 impl)
位于Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(流源,BlobRequestOptions选项)
位于Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(流源)
位于D:\DU Server\trunk\DU Server\DAL\Handlers\BlobHandler.cs中的DAL.Handlers.BlobHandler.CreateAd(HttpPostedFileBase文件,广告模型):第151行

内部异常:

{“远程服务器返回错误:(404)未找到。”}


任何人都能帮我解决这个问题。

简短版本

请为
BlobPropertySetting
功能尝试以下代码:

 public static CloudBlockBlob BlobPropertySetting(CloudBlobClient cloudBlobClientReferenceName, string blobContentName)
    {
        CloudBlockBlob blob = cloudBlobClientReferenceName.GetBlockBlobReference("upload/" + blobContentName);
        return blob;
    }
现在查看较长版本:)


出现此错误的原因是您在
BlobPropertySetting
方法中构造
CloudBlockBlob
对象的方式。使用代码时,它会创建一个具有以下URI的blob对象:
https://duv.blob.core.windows.net/blobContentName
。如果您注意到,这里没有容器名称。由于没有容器名称,存储客户端库假定您正在尝试在
$root
blob容器中创建一个blob,它是一个特殊的blob容器。您可以在此处阅读更多信息:。由于您的存储帐户没有此容器,因此您会收到
404-未找到资源
错误。

我已经很晚了,但仍然认为我的答案是否对任何人都有用

我通过输入正确的“容器名称”解决了这个错误。默认情况下是不同的。 我克隆了这个GIT项目:


首先要做的是检查是否使用任何azure storage Viewer.like cloudstorageexplorer正确创建了容器。其次,查看是否在BlobPropertySetting方法中正确获取blob引用?blobStorage.GetContainerReference(“上载”)提供以下{Microsoft.WindowsAzure.StorageClient.CloudBlobContainer}属性:{Microsoft.WindowsAzure.StorageClient.BlobContainerAttributes}元数据:{System.Collections.Specialized.NameValueCollection}Name:“上载”属性:{Microsoft.WindowsAzure.StorageClient.BlobContainerProperties}ServiceClient:{Microsoft.WindowsAzure.StorageClient.CloudBlobClient}Uri:{}我不确定我是否理解前3行..它们是类级变量还是从另一个未显示的方法运行它们?@paqogomez:class-level-vars..我使用的所有方法都显示在这里..非常感谢您花费宝贵的时间..但是我对代码流CloudBlobContainer container=blobStorage.GetContainerReference感到困惑e(CloudBlobContainesName);container.CreateIfNotExist();这两行执行na..?是的,它们已执行。您应该看到名为“upload”的blob容器在您的存储帐户中。基本上,您在离开该方法时丢失了对容器的引用。另一种选择是从该方法返回
CloudBlobContainer
类型的对象,而不是
CloudBlobClient
。然后在
BlobPropertySetting
中,当您传递此blob容器对象时,您可以不必在
GetBlockBlobReference
.HTH中预先输入容器名称。我也犯了同样的错误,甚至忘记更改容器名称。现在我的服务正在启动,但当尝试上载文件时,它在upload.js文件中抛出500个错误。TypeError:无法读取未定义的属性“status”。不确定我的错误是什么我在这里做赌注。
const
      express = require('express')
    , router = express.Router()
    , azureStorage = require('azure-storage')
    , blobService = azureStorage.createBlobService()
    , containerName = 'container' // added container name here, as my container name
    , config = require('../config')
;