2016-04-07 5 views
0

Webサイトにアップロードされ、Azureに保存されているファイルのファイル名とファイルサイズを返すことができないという問題があります。コントローラ。MVC - AzureからCSHTMLでファイル属性を返すhttppost

私CSHTMLのスニペットは次のようになります。あなたが見ることができるように

<table class="table table-striped table-hover "> 
<thead> 
<tr> 
    <th>FIlename</th> 
    <th>Modified</th> 
    <th>File Size</th> 
    <th>Download File</th> 
    <th>Delete File</th> 
    </tr> 
</thead> 

<tbody> 
@foreach (var item in Model) 
{ 
<tr> 
    <td>@item.Name</td> 
    <td>Modified</td> 
    <td>@item.ContentLength</td> 
    <td><a id="@item" href="@item" onclick="downloadFile('@item')">Download</a></td> 
    <td><a id="@item" href="#" onclick="deleteFile('@item')">Delete</a></td> 
</tr> 
} 
</tbody> 
</table> 

、私はitem.Nameを持っているが、私は私が試したことの全ての下にまとめます他の多くを試みました。ファイルを完全にダウンロードして削除することができます。私のコントローラの

私の最も重要な部分は、次のとおりです。

public class HomeController : Controller 
{ 

    BlobStorageService _blobStorageService = new BlobStorageService(); 

    public ActionResult Upload() 
    { 
     CloudBlobContainer blobContainer = _blobStorageService.GetCloudBlobContainer(); 
     List<string> blobs = new List<string>(); 
     foreach (var blobItem in blobContainer.ListBlobs()) 
     { 
      blobs.Add(blobItem.Uri.ToString()); 
     } 
     return View(blobs); 
    } 

    [HttpPost] 
    public ActionResult Upload(HttpPostedFileBase file) 
    { 
     if (file.ContentLength > 0) 
     { 
      CloudBlobContainer blobContainer = _blobStorageService.GetCloudBlobContainer(); 
      CloudBlockBlob blob = blobContainer.GetBlockBlobReference(file.FileName); 
      blob.UploadFromStream(file.InputStream); 
     } 
     return RedirectToAction("Upload"); 
    } 

あなたが見ることができるように、ファイルサイズとファイル名ですん。ContentLengthはにHomeControllerコンテキスト内に存在します。

私はそれがitem.FileName、@ item.file.FileName、@ item.HttpPostedFileBase.Filename @ file.FileName、@ item.filename @

を作業得るために、以下の様々な例を試してみました - 他の人はすべて同じです。

そのモジュールのドキュメントを持っているあなたは答えを知っている場合、あなたは私にあなたがそれを見つけた場所のソースを伝えることができ、私はPythonでの作業に慣れている

が、これは非常に異なっている

答えて

0

問題がですGET Uploadビューをレンダリングするために使用するViewModel。

[HttpGet] 
public ActionResult Upload() {  
    List<string> blobs = new List<string>(); 
    // add URI strings to list ... 
    return View(blobs, "Upload"); 
} 

これはModelList<string>で、あなたのCSHTMLを意味します。

あなたが実際に望むのは、URIだけでなく、FileNameとContentLengthを保持するビューモデルのコレクションです。 CSHTMLで@modelディレクティブを使用して

public class FileDisplayModel { 
    public string Uri { get; set; } 
    public string Name { get; set; } 
    public int ContentLength { get; set; } 
} 

は、IDEがあなたのコントローラから右のモデルを渡しているかどうかを確認することができます。 .NET用

@* Upload.cshtml *@ 
@model IList<FileDisplayModel> 

ドキュメントがMSDNで見つけることができます:ここでHttpPostedFileBase Class

は、私は画像のアップロードに使用するチュートリアルです:File Uploads in ASP.NET MVC with View Models

+0

だから私はFileDisplayと呼ばれる新しいモデルを作成する必要がありますか? – user3019191

+0

はい、コントローラにViewModelを作成して塗りつぶしてから、Viewをレンダリングします。 –