【问题标题】:How to get full path of user's file upload?如何获取用户文件上传的完整路径?
【发布时间】:2020-12-14 09:09:28
【问题描述】:

我们的 Intranet 上有一个问题跟踪系统,我们需要将受影响的文件添加到问题中,包括文件的路径。

我们一直在使用 asp.net FileUpload 控件并使用 FileUpload1.PostedFile.FileName 来获取用户选择和上传的文件的路径。这些文件通常不在用户本地计算机上,而是在与问题跟踪系统不同的服务器上的网络驱动器上。我们使用上传作为将文件添加到问题跟踪器的简单方法。

出于安全原因,这不适用于任何最新的浏览器,仅适用于即将淘汰的 Internet Explorer。

有没有办法让它工作?至少对于 Intranet 站点?还是有更好的方法来解决这个问题?我们确实需要文件路径,如果我们必须复制和粘贴,这会使这个过程花费更长的时间,因为它会使其成为一个两步过程,并且经常需要添加许多文件。

这是asp.net页面的sn-p:

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

这是我获取文件路径的方式:

Dim sFileLocation As String = ""
Dim sFileName As String = ""
Dim sExtension As String = ""

sFileName = GetFileName(Me.FileUpload1.FileName)
sExtension = GetExtension(Me.FileUpload1.FileName)
sFileLocation = Me.FileUpload1.PostedFile.FileName
sFileLocation = sFileLocation.Replace(sFileName, "")

【问题讨论】:

  • 你想做什么?您无法捕获上传文件的用户的文件路径?请澄清并可能添加您的代码的 sn-p,以便我们获得更好的图片。
  • @JobesK 我正在尝试在用户机器上获取上传文件的完整目录。然后将其存储在数据库中并在我们的问题跟踪系统中引用。
  • 这是不可能的,因为从服务器机器获取客户端机器的这些信息是一个安全问题。
  • @UweKeim 这是来自 Intranet 站点,因此在这种情况下它不应该是安全问题,这就是我正在寻找解决方法的原因。是否涉及浏览器插件或其他方法。
  • 不可能的 IMO。即使client-side JS File API 也没有提供获取本地文件夹的方法。可能与this 重复。您是否正在尝试解决XY problem?也许存在特定于浏览器的黑客攻击。

标签: javascript asp.net vb.net google-chrome microsoft-edge


【解决方案1】:

这仅适用于 IE 11,未测试 IE edge。 铬不工作。 由于 Intranet,我们只允许在内部使用 IE。

这是我用来检查文件大小和名称的逻辑,validateFile函数可以毫无问题地获取文件路径

            <asp:FileUpload ID="fuAFS" runat="server" CssClass="cssAFS cssFu" AllowMultiple="false" Width="550px" />&nbsp;<asp:Button ID="btnAFS" runat="server" Text="Upload AFS" OnClientClick="return ValidateFile('cssAFS');" />



           function ValidateFile(cssName) {
                var fu = $('.' + cssName);
                //Empty upload control file.length == 1
                if (fu.length > 0) { //Upload control exists
                    var pathName = fu.val();
                    if (pathName == '') {
                        alert('Missing file. Please click the Browse button to select a file with extension pdf.');
                        return false;
                    }
                }
                return true;
            }
            $('.cssFu').on('change', function (e) {
                var maxFileSize = $('#<%=hdnMaxFileSize.ClientID%>').val();
            if (e.target.files.length == 1) {
                if (e.target.files[0] != null) {
                    var size = e.target.files[0].size; //IE 
                    var fileSize = e.target.files[0].fileSize; //Firefox
                    var pathName = $(this).val();
                    var ext = pathName.substring(pathName.lastIndexOf(".") + 1, pathName.length).toLowerCase();
                    if (size > maxFileSize * 1024 * 1024 || fileSize > maxFileSize * 1024 * 1024) {
                        alert('File size exceeds limit. Maximum file size permitted is ' + maxFileSize + ' MB.');
                        $(this).val('');
                        // Prevent form Upload
                        e.stopPropagation();
                        e.preventDefault();
                    } else if (ext != 'pdf') {
                        alert('Invalid File. Please upload a File with extension: PDF');
                        $(this).val('');
                        // Prevent form Upload
                        e.stopPropagation();
                        e.preventDefault();
                    }
                    var fileName = pathName.substring(pathName.lastIndexOf("\\") + 1, pathName.length);
                    if (fileName != '' && fileName.length > 100) {
                        alert('File name length over 100 characters, please rename the file and upload again.');
                        $(this).val('');
                        // Prevent form Upload
                        e.stopPropagation();
                        e.preventDefault();
                    }
                }
            }

【讨论】:

  • 这是在哪里记录的?您在哪些浏览器和哪些版本中进行测试?
  • 现在让我在 IE 和 Chrome 中测试
  • 这不会给你一个正确的路径。 Chrome 将路径设置为“C:\fakepath\filename.ext”。它不会报告用户上传文件的实际路径。见stackoverflow.com/q/4851595/215552
  • 适用于 IE 11,但不适用于 Chrome,由于现在开会,我没有测试 IE edge
【解决方案2】:

@rgorr - 出于安全原因,FileUpload 永远不会为您提供完整路径。

Server.MapPath(FileUpload1.FileName);

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2013-06-29
    • 2013-11-24
    • 2016-11-26
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多