web-dev-qa-db-ja.com

asp.net mvc 4かみそりでのファイルのアップロード

ASP .Net MVC 4.およびVS1を使用しています。私はWebアプリケーションの初心者です。

HTMLかみそりビューのページをデザインしました。これがIndex.cshtmlのコードです。

@{
ViewBag.Title = "BAP Automation";
}
@section featured {
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>@ViewBag.Title.</h1>
                <h2>@ViewBag.Message</h2>
            </hgroup>
            <form action="Index">
            <table>              **//EDITED BELLOW**
                <tr><form action="" method="post">
                    <td>Upload Excel File: </td>
                    <td><input type="text" name="NAMEtxtFileName"/></td>
                    <td><input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/></td>
                    </form>
                </tr>
                <tr>
                    <td>Company Name: </td>
                    <td><input type="text" /></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td align="right"><input type="submit" value="Process" /></td>
                    <td></td>
                </tr>
            </table>
            </form>
        </div>
    </section>
}

NAMEbtnUploadのクリックイベントでExcelファイルをアップロードしようとしています。このボタンをクリックすると、このページが表示されます。ファイルのアップロードダイアログが開き、ファイルを選択すると、ファイルの場所がNAMEtxtFileNameテキストボックスに表示されます。

編集1:

提案されたコードからいくつかのコードを書きました:

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
    {
        if (NAMEbtnUpload.ContentLength > 0)
        {
            var fileName = Path.GetFileName(NAMEbtnUpload.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data/Given Excel's"), fileName);
            NAMEbtnUpload.SaveAs(path);
        }

        return RedirectToAction("Index");
    }

しかし、これは次のエラーを示しています:

「/」アプリケーションでのサーバーエラー。

リソースが見つかりません。説明HTTP 404。探しているリソース(またはその依存関係の1つ)が削除されたか、名前が変更されたか、一時的に利用できなくなっている可能性があります。次のURLを確認して、スペルが正しいことを確認してください。

リクエストされたURL: /

12
Abdur Rahim

「EncType」属性をフォームに追加してみてください。

@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
  //FORM MARKUP HERE
}
14
Hemslingo

Phil Haackは、彼のブログ投稿でファイルのアップロードを処理する方法を示しています ASP.NET MVCを使用したファイル(またはファイル)のアップロード

あなたが見逃しているものがかなりあるので、その投稿を読むと、ここでの答えよりもさらにあなたを得るでしょう。

**編集1の更新**

いくつかの問題

  1. _<form action="index" >_-これは_<form action="/ControllerName/Index">_である必要があります
  2. ネストされた複数のフォームタグがあります。複数のフォームタグを使用できますが、それらをネストすることはできません。あなたの場合はあなただけが必要です。ほとんどの場合、必要なのは1つだけです。
  3. _<input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/>_は

フォームタグを手動で作成するのではなく、@using(Html.BeginForm())を使用するのがより一般的です。下記参照。

_@using(Html.BeginForm("Index"))
{
 <table>
    <tr>
        <td>Upload Excel File: </td>
        <td><input type="text" name="NAMEtxtFileName"/></td>
        <td><input type="file" id="IDbtnUpload" name="NAMEbtnUpload"/></td>

    </tr>
    <tr>
        <td>Company Name: </td>
        <td><input type="text" /></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td align="right"><input type="submit" value="Process" /></td>
        <td></td>
    </tr>
 </table>
}
_
10
Brett Allred

このページにある[アップロード]ボタンをクリックすると、ファイルのアップロードダイアログが開いてファイルを選択するだけで、ファイルの場所がNAMEtxtFileNameテキストボックスに表示されます。

ファイルアップロード要素にはプログラムからアクセスできないため、これは不可能です。 「昔のこと」でした。悪意のあるサイトは、ファイルアップロードコントロールの値を既知のパスワードファイルの場所などに設定することにより、機密情報を静かにアップロードしました。

@Bretts回答のリンクで提案されているように、フォームに<input type="file" />を配置し、アップロードサーバーサイドを処理する必要があります。

4
CodeCaster

コントローラークラスにファイルコントロールの名前を設定します。上記のコードの例

public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)

nAMEbtnUploadをNAMEtxtFileNameに変更すると、問題が解決します。

1
Esha Garg