2017-06-13 14 views
0

非常に単純なビューがあり、ユーザにJSONファイルを選択して解析させます。ここでJSONファイルを解析するためにファイルパスをコントローラに返す方法

がビューから該当するコードである...ここで

@using (Html.BeginForm("AddSampleDataJSON", "Event")) 
{ 
    <input type="file" name="GetJSONFile" /><br> 
    <input type="submit" /> 
} 

は、コントローラからの方法である:

[HttpPost] 
    public ActionResult AddSampleDataJSON(FormCollection form) 
    { 
     string path = ?? 
     using (StreamReader r = new StreamReader(path)) 
     { 
      string json = r.ReadToEnd(); 
      List<Event> events = 
      JsonConvert.DeserializeObject<List<Event>>(json); 
     } 
     return View(); 
    } 

質問は、私は完全なパスにアクセスするので、私はどうすればよいです最終的にJSONを解析するためにStreamReaderに送信することができます。 FormCollectionオブジェクトには表示されません。

+2

セキュリティ上の理由からブラウザはファイル名のみを送信し、使用ファイルシステムは公開しません。パラメータは 'HttpPostedFileBase GetJSONFile'でなければならず、ファイルの内容が読み込まれます。そして、フォームタグ –

+0

に 'enctype =" multipart/form-data "属性を設定する必要があります。私はその属性を追加した後でもnullになります。そして私が選んでいるファイルは、実際にはJSONファイルです。 – user1327418

+0

それから正しく設定しなかった。 (それはどんなタイプのファイルでも違いはありません) –

答えて

2

ファイルへのクライアントパスにアクセスすることはできません。ファイル名のみが表示されます。

あなたはあなたのビューでmultipart/form-dataにエンコーディングを設定する必要があります。

@using (Html.BeginForm("AddSampleDataJSON", "Event", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="uploadedFile" /><br> 
    <input type="submit" /> 
} 

そして、あなたのコントローラでパラメータ名の形式でnameパラメータと同じもので、HttpPostedFileBaseにご入力パラメータを変更します。

[HttpPost] 
public ActionResult AddSampleDataJSON(HttpPostedFileBase uploadedFile) 
{ 
    using (StreamReader r = new StreamReader(uploadedFile.InputStream)) 
    { 
     string json = r.ReadToEnd(); 
     List<Event> events = JsonConvert.DeserializeObject<List<Event>>(json); 
    } 

    return View(); 
} 
+0

優秀、働いた! – user1327418

関連する問題