0

ASP .Net MVC 4.0、vs10を使用しています

私のボタンクリックイベントの1つで、次のような会社名を取得しています:

if (Request.Form["NAMEbtnImport"].Length > 0)
            {
                if (Request.Form["NAMEbtnUpload"].Length > 0 && Request.Form["NAMEtxtCompany"].Length > 0 )
                {
                    Session["CompanyName"] = Request.Form["NAMEtxtCompany"].ToString();
                    var x = collection.GetValue("NAMEbtnUpload"); 
                    filePath = x.AttemptedValue.ToString();
                    filePath = Request.Form["NAMEbtnUpload"];
                    string fileName = Path.GetFileName(filePath);                                        //var path = Path.Combine(Server.MapPath("~/Uploads"), filePath);
                    if (System.IO.File.Exists(filePath))
                    {
                        System.IO.File.Copy(filePath, Server.MapPath("~/Uploads/" + fileName));
                    }
                    companyName = Request.Form["NAMEtxtCompany"].ToString();
                    newFilePath = "Uploads/" + fileName;
                    ViewBag.CompanyName = companyName;
                }

これは私のhtmlです:[編集]

<input type="file" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/>

これは IE で正常に動作しています。ファイルパスがいっぱいです。しかし、Firefox ではファイル名だけが受信されます。collection と request.form は同じデータを出力します。

ここで何が問題なのですか?私の下手な英語でごめんなさい。

4

2 に答える 2

2

Internet Explorer は完全なファイル パスをサーバーに送信します。Firefox はそうではありません。

これは、ブラウザの作成者によるセキュリティ上の決定です。それについてあなたができることは何もありません。

さらに、File.Copyソースのアップロードされたファイルをサーバー上のどこかにコピーしようとしているようです。これは、ローカルファイルをコピーするためだけに作成されたものです。ブラウザがサーバー上で実行されていない場合は機能しません。

次のようなものを使用する必要があります

<asp:FileUpload  runat="server" ID="fuSample" />

あなたのaspxファイルで

if (fuSample.HasFile)
{
    fuSample.SaveAs(
        Server.MapPathMapPath("~/Uploads/" + fuSample.FileName));
}

コードビハインドで。

編集:バニラで立ち往生している場合は<input type="file" id="someID" ... />、試してください

var file = this.Context.Request.Files["someID"];
if (file != null)
    file.SaveAs(Server.MapPathMapPath("~/Uploads/" + file.FileName));
于 2013-01-28T16:03:33.347 に答える
1

クライアント マシンの完全なファイル パスにアクセスすることを期待していますか? これを行うことはできませんし、行う必要もないはずです。

これを許可するブラウザーは、セキュリティ上のリスクになります。

あなたがやろうとしていることを誤解している場合は、事前に謝罪してください!

編集: MVC でファイルのアップロードを処理するには、アクションで HttpPostedFileBase を使用できます。このようなもの:

<input type="file" name="file">

//POST FORM

        public ActionResult form_Post(HttpPostedFileBase file)
        {

              if (file != null && file.ContentLength > 0)
                {
                  file.SaveAs(mySavePath);
                 }
         }

編集:最新のコメントのファイル保存に関するコード:

                var fileName = Path.GetFileName(file.FileName);

                var path = Path.Combine(Server.MapPath("/myupload/path/"), fileName);

                if (!System.IO.File.Exists(path))
                {
                    file.SaveAs(path);
                }
于 2013-01-28T15:58:38.317 に答える