4

MVC3/.Net 4.5/Azure ソリューションを MVC4 に更新しました。アップグレードされた MVC4 ソリューションでは、画像を BLOB ストレージにアップロードするためのコードが毎回失敗するように見えます。ただし、MVC3 ソリューションを実行すると正常に動作します。DLL でアップロードを行うコードは変更されていません。

MVC3 および MVC4 ソリューションで同じ画像ファイルをアップロードしました。ストリームで検査しましたが、問題ないようです。どちらの場合も、自分のマシンでローカルにコードを実行しており、接続はクラウド内の BLOB ストレージを指しています。

デバッグのためのポインタはありますか? MVC4 へのアップグレード時に認識していない既知の問題はありますか? ここに私のアップロードコードがあります:

        public string AddImage(string pathName, string fileName, Stream image)
    {
        var client = _storageAccount.CreateCloudBlobClient();
        client.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(5));
        var container = client.GetContainerReference(AzureStorageNames.ImagesBlobContainerName);

        image.Seek(0, SeekOrigin.Begin);
        var blob = container.GetBlobReference(Path.Combine(pathName, fileName));
        blob.Properties.ContentType = "image/jpeg";

        blob.UploadFromStream(image);

        return blob.Uri.ToString();
    }
4

1 に答える 1

5

私はなんとかそれを修正することができました。何らかの理由で、HttpPostFileBaseから直接ストリームを読み取ることが機能していませんでした。それを新しいメモリストリームにコピーするだけで解決しました。私のコード

public string StoreImage(string album, HttpPostedFileBase image)
    {   
        var blobStorage = storageAccount.CreateCloudBlobClient();
        var container = blobStorage.GetContainerReference("containerName");
        if (container.CreateIfNotExist())
        {
            // configure container for public access
            var permissions = container.GetPermissions();
            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            container.SetPermissions(permissions);
        }

        string uniqueBlobName = string.Format("{0}{1}", Guid.NewGuid().ToString(), Path.GetExtension(image.FileName)).ToLowerInvariant();
        CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);
        blob.Properties.ContentType = image.ContentType;
        image.InputStream.Position = 0;
        using (var imageStream = new MemoryStream())
        {
            image.InputStream.CopyTo(imageStream);
            imageStream.Position = 0;
            blob.UploadFromStream(imageStream);
        }

        return blob.Uri.ToString();           
    }
于 2013-02-28T11:03:39.277 に答える