5

MVC5 インターネット アプリケーションのコーディングを行っていますが、自分のファイル システムから Azure Blob にファイルをアップロードする方法を教えてください。

これが私の Azure アップロード コード関数です。

public void UploadFileToBlobStorage(string containerName, string blockBlogName, string fileName)
{
    // Retrieve storage account from connection string.
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("StorageConnectionString"));

    // Create the blob client.
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

    // Retrieve reference to a previously created container.
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);

    // Create the container if it doesn't already exist.
    container.CreateIfNotExists();

    container.SetPermissions(
        new BlobContainerPermissions
        {
            PublicAccess =
                BlobContainerPublicAccessType.Blob
        }); 

    // Retrieve reference to a blob named "myblob".
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blockBlogName);

    // Create or overwrite the "myblob" blob with contents from a local file.
    using (var fileStream = System.IO.File.OpenRead(fileName))
    {
        blockBlob.UploadFromStream(fileStream);
    }
}

テストファイルをアップロードする関数は次のとおりです。

public void UploadTestFile(string localFileName)
{
    string containerName = "TestContainer";
    string blockBlogName = "Test.txt";
    AzureService azureService = new AzureService();
    azureService.UploadFileToBlobStorage(containerName, blockBlogName, localFileName);
}

ユーザーがアップロードするファイルを参照できる MVC ビューから UploadTestFile() 関数を呼び出す方法がわかりません。

Ajax を使用する必要がありますか? それとも、MVC ビューからメソッドを呼び出してファイルをアップロードできますか? これについて何か助けてもらえますか?

前もって感謝します

4

1 に答える 1

9

UploadTestFile() 関数を MVC ビューから呼び出す 1 つの方法は、Html.BeginForm() メソッドを使用することです。以下に例を示します。

@using (Html.BeginForm("UploadTestFile", "INSERT_YOUR_CONTROLLER_NAME_HERE", FormMethod.Post, new { enctype = "multipart/form-data" })) {
    <span>
        <input type="file" name="myFile" multiple /> <br>
        <input type="submit" value="Upload" />
    </span>

}

また、コードに関するいくつかの提案:

  1. UploadFileToBlobStorage(): コードは、コンテナーの存在と、要求ごとにアクセス許可の設定をチェックします。container.CreateIfNotExists() ロジックと container.SetPermissions(…) ロジックを、最初の展開時に 1 回だけ実行する必要がある別の初期化関数に分けることをお勧めします。

  2. UploadFileToBlobStorage(): コードは、マルチパート フォーム データではなく、VM ファイル システムから localFileName をアップロードしようとするようです。1 つの方法は、HttpFileCollectionBase クラスと Controller.Request プロパティを使用することです。以下の例:

    public void UploadFileToBlobStorage(
        string containerName, 
        string blockBlogName, 
        HttpFileCollectionBase files) 
    {
    
        // .....
    
        // Use this:
        blockBlob.UploadFromStream(files[0].InputStream); 
    
        /* uploading the first file: 
           you can enumerate thru the files collection 
           if you are uploading multiple files */
    
        /* Instead of this: 
           Create or overwrite the "myblob" blob with contents 
           from a local file. */
        using (var fileStream = System.IO.File.OpenRead(fileName)) 
        {
            blockBlob.UploadFromStream(fileStream);
        }
    }
    
    [HttpPost]
    public void UploadTestFile() 
    {
        string containerName = "TestContainer";
        string blockBlogName = "Test.txt";
        AzureService azureService = new AzureService();
    
        // Notice the Request.Files instead of localFileName
        azureService.UploadFileToBlobStorage(
              containerName, blockBlogName, Request.Files);
    }
    

それがあなたの側でうまくいくかどうか教えてください。

于 2014-09-19T03:32:22.193 に答える