1

ファイルをAzure ストレージ コンテナーにアップロードしようとしています。Web アプリをローカルで実行すると、ファイルがWeb サイトのルートにない場合、エラーが発生します。

Could not find file 'C:\Program Files (x86)\IIS Express\test.txt'.

ファイルをWeb アプリのルート フォルダーにコピーすると、正常に動作します。

クラウドでWeb アプリを実行すると、次のエラーが表示されます。

Could not find file 'D:\Windows\system32\test.txt'.

HttpPostedFileBaseオブジェクトから完全なローカル ファイル パスを取得できません。

コード: _

private string UploadFile(HttpPostedFileBase file, string folder)
    {
        try
        {
            var date = DateTime.UtcNow.ToString("yyyyMMdd-hhmmss-");
            var fileName = Path.GetFileName(file.FileName);

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=http;AccountName=test;AccountKey=asdfasfasdasdf");
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
            CloudBlobContainer container = blobClient.GetContainerReference(folder);
            bool b = container.CreateIfNotExists();

            CloudBlockBlob blockBlob = container.GetBlockBlobReference(date + fileName);
            blockBlob.Properties.ContentType = file.ContentType;

            using (var fileStream = System.IO.File.OpenRead(fileName))
            {
                blockBlob.UploadFromStream(fileStream);
            }
            return blockBlob.Uri.AbsoluteUri;

        }
        catch (Exception ex)
        {
            return ex.Message;
        }
4

2 に答える 2

3

HttpPostedFileBase マニュアルには次のように書かれています。

FileNameクライアント上のファイルの完全修飾名を取得します。

つまり、ファイル名はサーバー上で開くことができるものではありません。

あなたが本当にやりたいことは、InputStream プロパティを使用することだと思います。

blockBlob.Properties.ContentType = file.ContentType;

blockBlob.UploadFromStream(file.InputStream);  // Upload from InputStream
return blockBlob.Uri.AbsoluteUri;
于 2013-03-17T07:16:31.037 に答える