2

Windows Azure 1.7 から 2.1 にアップグレードする必要がありました。私が持っていたコードの唯一の変更

blob.UploadFromFile(tempImage); blob.UploadFromFile(tempImage,FileMode.CreateNew); に

ただし、次のエラーが表示されます:「FileMode: CreateNew と FileAccess: Read の組み合わせは無効です。」

これが私のコードです(試しに「blob.OpenWrite();」を追加しました)。このエラーが発生する理由はありますか?

  string blobUri;

        /*var acct = CloudStorageAccount.FromConfigurationSetting("ImagesConnectionString");*/

        var setting = CloudConfigurationManager.GetSetting("ImagesConnectionString");
         var acct = CloudStorageAccount.Parse(setting);

        var blobClient = acct.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName")); //.GetContainerReference("ContainerName");
        container.CreateIfNotExists(); //CreateIfNotExist

        var perms = container.GetPermissions();

        //upload blob image
        LocalResource local = RoleEnvironment.GetLocalResource("tempImages");
        string tempSlideImage = local.RootPath + mySlideName;
        myImage.Save(tempSlideImage);            

        CloudBlockBlob blob = container.GetBlockBlobReference(myImageName);
        blob.Properties.ContentType = "image/jpeg"; //photoToLoad.PostedFile.ContentType; //blob.Properties.ContentType = photoToLoad.PostedFile.ContentType;

        blobClient.ParallelOperationThreadCount = 3;
        blob.OpenWrite(); //this was added after the migration
        blob.UploadFromFile(tempImage,FileMode.CreateNew); //.UploadFile //blob.UploadFromStream(photoToLoad.FileContent);
        blobUri = blob.Uri.ToString();
4

3 に答える 3

17

UploadFromFile の 2 番目のパラメーター (FileMode) は、Azure ストレージ内の BLOB で何をしたいかではなく、ローカル マシンでファイルを開く方法を参照しています。したがって、修正するには次のことができます。

変化する

blob.UploadFromFile(tempImage,FileMode.CreateNew); 

blob.UploadFromFile(tempImage,FileMode.Open); 

また、tempImage とは何ですか? コードのその部分を省略したか、tempSlideImage にする必要があります。

于 2013-10-24T04:30:00.483 に答える
1

kwillが言ったことは機能しますが、私は次のように解決しました:

 using (var fileStream = System.IO.File.OpenRead(tempSlideImage))
        {
            blob.UploadFromStream(fileStream);
        }
于 2013-10-25T16:25:20.327 に答える
1

私の場合、サーバーは HttpPostedFileBase のファイル名を誤って識別します。したがって、入力ストリームを直接ロードします。

  HttpPostedFileBase file

   CloudBlockBlob blob;
    .......

   using (var fileStream = file.InputStream)
    {
        blob.UploadFromStream(fileStream);
    }
于 2014-01-17T23:13:34.667 に答える