【问题标题】:control the working directory for <input type="file">?控制 <input type="file"> 的工作目录?
【发布时间】:2009-05-03 21:57:36
【问题描述】:

全文: 我正在为我的公司开展一个项目,该项目要求我们每个地点的用户上传由第三方软件生成的报告。该软件生成的所有报告始终放置在同一目录中。 从过去(和现在)执行类似困难任务的经验来看,我们的一些计算机知识较少的员工将难以找到要上传的正确目录。

每个位置的计算机都运行 Windows Server 2003 并且当前具有 IE6

我们希望通过将文件输入默认设置为指向正确的目录来提高易用性和合规性。

我最初希望能够直接在输入值中设置文件,但这是有充分理由在大多数浏览器中禁用的。 是否可以通过javascript,或者只是在HTML本身来控制用户按下浏览按钮时打开的目录?

如果没有,关于如何完成它还有什么其他建议?甚至像在桌面上成功设置快捷方式这样简单的方法也会强制浏览器使用所需的工作目录。 (IE 显然忽略了快捷方式的 'start in' 参数)

【问题讨论】:

    标签: javascript internet-explorer


    【解决方案1】:

    出于安全原因,您无法使用 JavaScript 控制文件输入的内容。否则,您可以创建一个带有文件输入字段的隐藏表单,将其设置为路径,然后使用 JavaScript 提交表单,以便在用户不知情的情况下将文件上传到您的服务器。

    不幸的是,我不知道如何设置文件选择器的默认路径。如果有的话,我确信它将是特定于浏览器的,并且只能通过在客户端设置一些选项来使用,而不是通过 HTML 或 JavaScript。

    【讨论】:

      【解决方案2】:

      通过 Google 快速搜索,我们找到了 JUpload——一个开源签名的 Java 小程序,似乎可以满足您的所有需求:http://jupload.sourceforge.net/

      演示站点:http://jupload.sourceforge.net/advanced_js_demo.html

      我敢肯定还有很多其他这样的 Java 小程序,而且你自己的应用程序可能不会太难。

      我能想到的唯一其他选择是桌面上传应用程序。

      【讨论】:

      • java 有点侵入性,你不觉得吗?在安装一个 100MB 以上的运行时会消耗原生资源等之前,我会选择许多 activex 控件和 Flash 上传控件。
      • Flash 上传控件也无法解决问题,它们遵循与基本 HTML 相同的安全规则——仅文件名和扩展名。您对 Java 足迹是正确的,但我对使用 ActiveX 控件和/或注册表黑客同样犹豫不决。叫我有偏见,我想,但我会选择独立于操作系统/浏览器的 Java 和任何一天在 IE 上运行的 ActiveX 控件:P
      【解决方案3】:

      IE 使用为文件上传选择的最后一个文件夹。如果您可以控制客户端计算机,我的建议是;将驱动器号映射到文件所在的文件夹。这可以使用放入自动加载调用 subst 的 cmd 文件轻松完成。然后指导用户手动输入驱动器号,因为它很短,应该可以写一个非常清晰易懂的说明。祝你好运。

      【讨论】:

        【解决方案4】:

        简单地说,不可能做任何这样的事情。如您所见,所有/大多数答案都同意此陈述,以及那些没有误解问题的答案。很抱歉,但大多数浏览器认为您的操作存在安全风险。

        【讨论】:

          【解决方案5】:

          您不能设置输入文件的值,这是一个安全问题。

          您可以使用 activex 控件,尽管这些东西已经过时了。有许多高级文件上传 activex 控件,我敢打赌你可以很便宜地选择一个。

          下载目录的注册表设置可能会起作用:(即使它是上传) 每次他们打开 IE 时,您都必须弄清楚如何设置它

          HKCU\Software\Microsoft\Internet Explorer\DownloadDirectory
          

          【讨论】:

            【解决方案6】:

            这行得通。 在这里,我需要确保用户在客户端本地图像路径上使用了输入图像文件。 UrlExists 简单检查文件是否可以加载到已知路径+文件名。 我还需要让输入看起来比浏览器更好。 这里的诀窍是在画布上放置比这里显示的更多的工作来屏蔽输入。将输入不透明度设置为 0 ,这里设置为 0.5 以便您看到技巧。

                <body>
                <canvas id="FancyCanvasButton" tabindex="8" width="240" height="18" style="position: absolute; left: 100px; top: 120px; border: 1px solid rgb(0, 0, 0); z-index: 1;"></canvas>
                <input type="file" accept="image/*" onchange="loadFile(event)" style="opacity:0.5;position: absolute; left: 100px; top: 120px; z-index: 2; " >
                <img id="output"/>
             <script>
             var loadFile = function(event) {
               var output = document.getElementById('output');
               var fName= "Images/" + event.target.files[0].name;  //None path with users selected file name
               if(UrlExists(fName)){
                 output.src=fName;         //Do something like show image
               }else{
                alert("File not present"); // Do something to show file not in this path
               }
             };
            
             function UrlExists(url) {
                var http = new XMLHttpRequest();
                http.open('HEAD', url, false);
                http.send();
                if (http.status != 404){
                   return true;
                 }else{
                   return false;
                 }
              }
            
              </script>
            

            【讨论】:

            • var fName 应该有用户文件名的已知路径我的 cmets 说“无”不是“已知”
            猜你喜欢
            • 1970-01-01
            • 2015-07-19
            • 1970-01-01
            • 1970-01-01
            • 2017-12-04
            • 2017-11-26
            • 1970-01-01
            • 2013-12-07
            • 1970-01-01
            相关资源
            最近更新 更多