0

以下のコードでは、エラー メッセージが表示されます。

指定されたブロブは存在しません

コードをデバッグすると.CreateBlobContainer、指定された bob が作成されたことがわかります。次に、コードの外側で、テキスト ファイルを手動でコピーして blob に貼り付けました。次に、コードの最後の行に到達すると、.DownloadToStream 例外エラーがスローされます。指定されたブロブが存在しないと言っています。--ボブが存在する場合でも

以下のサンプルコードの何が問題になっていますか:

        string testContainerName = "xyz"+Common.GenerateRandomEightCharString().ToLower();

        var testBlobClient = BlobClientFactory.CreateBlobClient(true);
        var testContainer = BlobClientFactory.CreateBlobContainer(testBlobClient, testContainerName);
        var zipOutputStream = new ZipOutputStream(Response.OutputStream)
        {
            CompressionLevel = CompressionLevel.Default
        };
        zipOutputStream.CompressionLevel = CompressionLevel.Default;
        zipOutputStream.EnableZip64 = Zip64Option.AsNecessary;
        CloudBlob testBlob = testBlobClient.GetBlobReference(testBlobClient.BaseUri.ToString() + testContainerName);
        zipOutputStream.PutNextEntry(testContainerName);
        BlobRequestOptions options = new BlobRequestOptions();
        options.Timeout = TimeSpan.FromSeconds(20.0);
        testBlob.DownloadToStream(zipOutputStream, options); //Exception error here

例外メッセージは次のとおりです。

Microsoft.WindowsAzure.StorageClient.StorageClientException was unhandled by user code
  HResult=-2146233088
  Message=The specified blob does not exist.
  Source=Microsoft.WindowsAzure.StorageClient
  StackTrace:
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.Execute()
       at Microsoft.WindowsAzure.StorageClient.RequestWithRetry.RequestWithRetrySyncImpl[TResult](ShouldRetry retryOracle, SynchronousTask`1 syncTask)
       at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteSyncTaskWithRetry[TResult](SynchronousTask`1 syncTask, RetryPolicy policy)
       at Microsoft.WindowsAzure.StorageClient.CloudBlob.DownloadToStream(Stream target, BlobRequestOptions options)
       at ............................
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
  InnerException: System.Net.WebException
       HResult=-2146233079
       Message=The remote server returned an error: (404) Not Found.
       Source=System
       StackTrace:
            at System.Net.HttpWebRequest.GetResponse()
            at Microsoft.WindowsAzure.StorageClient.EventHelper.ProcessWebResponseSync(WebRequest req, EventHandler`1 handler, Object sender)
       InnerException: 
4

2 に答える 2

1

Webロールを再起動したところ、機能し始めました

于 2013-10-10T15:35:32.190 に答える
0

あなたのコメントに基づいて、何が起こっているかがわかります。基本的には、コードを使用して BLOB コンテナー (フォルダーと考えてください) を作成し、そのコンテナー内のファイルを手動でコピーします。ただし、ブロブ (ファイルと考えてください) に使用している URL は、ファイルではなくコンテナーの URL です。

必要なのは、ファイルの名前を blob URL に追加することです。したがって、コンテナに手動でコピーしたファイルの名前がであるとすると、次のコードを使用してオブジェクトをxyz.txt作成します。testBlob

CloudBlob testBlob = testBlobClient.GetBlobReference(testBlobClient.BaseUri.ToString() + testContainerName + "/xyz.txt");

試してみる。それはうまくいくはずです。

于 2013-10-07T13:23:04.290 に答える