C# 在Firefox中获取完整文件路径

C# 在Firefox中获取完整文件路径,c#,filepath,C#,Filepath,我正在使用ASP.NETMVC4.0,vs10 在我的一个按钮单击事件中,我得到的公司名称如下: if (Request.Form["NAMEbtnImport"].Length > 0) { if (Request.Form["NAMEbtnUpload"].Length > 0 && Request.Form["NAMEtxtCompany"].Length > 0 )

我正在使用ASP.NETMVC4.0,vs10

在我的一个按钮单击事件中,我得到的公司名称如下:

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都输出相同的数据


这里有什么问题?对不起,我的英语很差。

您希望访问客户端计算机上的完整文件路径吗?你不应该这样做,也没有必要这样做

允许这样做的浏览器将存在安全风险

如果我误解了你的意图,请提前道歉

编辑:要在MVC中处理文件上载,可以在操作中使用HttpPostedFileBase。大概是这样的:

<input type="file" name="file">
编辑:以及更多关于文件保存的代码,以获取您的最新评论:

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

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

                if (!System.IO.File.Exists(path))
                {
                    file.SaveAs(path);
                }

您希望访问客户端计算机上的完整文件路径吗?你不应该这样做,也没有必要这样做

允许这样做的浏览器将存在安全风险

如果我误解了你的意图,请提前道歉

编辑:要在MVC中处理文件上载,可以在操作中使用HttpPostedFileBase。大概是这样的:

<input type="file" name="file">
编辑:以及更多关于文件保存的代码,以获取您的最新评论:

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

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

                if (!System.IO.File.Exists(path))
                {
                    file.SaveAs(path);
                }

Internet Explorer将完整的文件路径发送到服务器;Firefox没有

这是浏览器作者的安全决定;你对此无能为力

此外,您似乎正在使用
File.Copy
尝试将源上传的文件复制到服务器上的某个位置。这仅用于复制本地文件-如果浏览器未在服务器上运行,则无法工作

你需要使用类似于

<asp:FileUpload  runat="server" ID="fuSample" />
在你的代码背后

编辑:如果你被香草味的
,试试看

var file = this.Context.Request.Files["someID"];
if (file != null)
    file.SaveAs(Server.MapPathMapPath("~/Uploads/" + file.FileName));

Internet Explorer将完整的文件路径发送到服务器;Firefox没有

这是浏览器作者的安全决定;你对此无能为力

此外,您似乎正在使用
File.Copy
尝试将源上传的文件复制到服务器上的某个位置。这仅用于复制本地文件-如果浏览器未在服务器上运行,则无法工作

你需要使用类似于

<asp:FileUpload  runat="server" ID="fuSample" />
在你的代码背后

编辑:如果你被香草味的
,试试看

var file = this.Context.Request.Files["someID"];
if (file != null)
    file.SaveAs(Server.MapPathMapPath("~/Uploads/" + file.FileName));

我使用的是razor视图。所以我用了。请参阅我的编辑部分。我怎么才能解决这个问题?@user1865670我不是100%确定,但我已经将
FileUpload
似乎在幕后做的事情编辑到了我的答案中。错误显示-->无法隐式将postedFileBaase转换为PostedFile?@user1865670使用HttpPostedFileBase而不是HttpPostedFile。请参阅我答案中的代码。我使用的是razor视图。所以我用了。请参阅我的编辑部分。我怎么才能解决这个问题?@user1865670我不是100%确定,但我已经将
FileUpload
似乎在幕后做的事情编辑到了我的答案中。错误显示-->无法隐式将postedFileBaase转换为PostedFile?@user1865670使用HttpPostedFileBase而不是HttpPostedFile。请参阅我答案中的代码。@user1865670请尝试此处演示的HttpPostedFileBase。“保存路径未根目录”。这是什么意思?@user1865670请参阅最新编辑,了解将文件保存到服务器的一些示例代码。@user1865670请尝试此处演示的HttpPostedFileBase。“保存路径不是根目录”。这是什么意思?@user1865670有关将文件保存到服务器的示例代码,请参阅最新编辑。