FileUpload无需传输文件

时间:2010-02-05 09:26:50

标签: c# asp.net

我需要为用户提供一种方法,以便在我的Intranet Web应用程序上指定其计算机上文件的路径,并且ASP:FileUpload控件提供了一个很好的对话框来执行此操作,但它也会传输内容档案结束。由于我只需要文件路径而不是内容,还有另一种方法可以实现吗?

2 个答案:

答案 0 :(得分:1)

您可以添加FileUpload控件。然后,在您的表单被提交之前,您可以将文件路径复制到一些隐藏的输入,并使用JavaScript删除FileUpload控件。

我从未尝试过,但它应该有效。但不知道目的。

答案 1 :(得分:1)

更新:以下代码将返回IE中的完整文件路径,但对于security reasons,firefox和chrome仅为您提供文件名。这可能是一个问题:)


我冒昧地实施了RaYell给出的解决方案。这是代码:

Default.aspx(标记):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SO._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function submitFormWithoutFile() {
            var fileUpload = document.getElementById('<%= this.FileUpload1.ClientID %>');
            var filePath = document.getElementById('<%= this.FilePath.ClientID %>');
            filePath.value = fileUpload.value;
            fileUpload.parentNode.removeChild(fileUpload);
        }
    </script>
</head>
<body>

    <form id="form1" runat="server">
        <asp:HiddenField ID="FilePath" runat="server" />
        <asp:FileUpload ID="FileUpload1" runat="server" />

        <asp:Button ID="Button1" runat="server" Text="Do it!" OnClientClick="submitFormWithoutFile();" />
    </form>
</body>
</html>

Default.aspx.cs(代码隐藏)

namespace SO
{
    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                // we have our file name but not the file
                this.form1.Controls.Add(new Literal() { Text = this.FilePath.Value });
                System.Diagnostics.Debug.Assert(this.FileUpload1.PostedFile == null);
            }
        }
    }
}