控制<input type="file">的工作目录?

23
完整故事: 我正在为我的公司开展一个项目,该项目要求我们各个位置的用户上传由第三方软件生成的报告。所有由此软件生成的报告都放置在同一个目录中。 鉴于一些计算机操作不熟练的同事根据之前(和持续进行中的)类似困难任务的经验:从供应商网站下载/保存发票到特定目录将会有找不到正确目录以上传的问题。
每个位置的计算机都运行Windows Server 2003,目前安装了IE6。
我们希望通过将文件输入设置为默认指向正确目录来增加易用性和合规性。
起初我希望能够直接将文件设置在输入值中,但出于好的原因,大多数浏览器都禁用了此功能。 是否可以通过JavaScript或仅在HTML本身中控制打开的目录,当用户按下浏览按钮时?
如果不行,还有哪些建议可行? 即使是简单的方法,例如成功地在桌面上设置快捷方式,强制浏览器使用所需的工作目录。(IE显然会忽略快捷方式的“启动”参数)
6个回答

13

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

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


2

1
Java有点侵入性,你不这么认为吗?在安装100MB+的运行时占用本地资源之前,我会选择许多ActiveX控件和Flash上传控件。 - Chad Grant
1
Flash上传控件也不行,它们遵循与基本HTML相同的安全规则——仅限文件名和扩展名。你对Java占用空间的看法是正确的,但我同样不愿使用ActiveX控件和/或注册表修改。也许你可以称我有偏见,但我会选择跨操作系统/浏览器的Java而不是在IE上运行的ActiveX控件:P - brianpeiris

1
简单来说,这是不可能做到的。正如你所见,所有/大多数答案都同意这个陈述,而那些不同意的人误解了问题。很抱歉,但你试图做的事情被大多数浏览器视为安全风险。

1

IE使用上次选择的文件夹进行文件上传。如果您可以控制客户端计算机,我的建议是:将驱动器映射到文件所在的文件夹。这可以通过在autoload中调用subst的cmd文件轻松完成。然后指示用户手动输入驱动器号,因为它非常短,应该可以编写非常清晰易懂的说明。祝好运。


0

这个有效。 在这里,我需要确保用户已经在客户端本地图像路径上使用了输入图像文件。UrlExists简单地检查文件是否可以加载到已知的路径+文件名。 我还需要让输入看起来比浏览器更好。 这里的诀窍是放置一个带有更多工作的I画布来掩盖输入。将输入不透明度设置为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>

变量fName应该有已知路径和用户文件名,我的注释中写的是“无”,而不是“已知”。 - Dave Rathbone

0

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

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

下载目录的注册表设置可能会解决问题:(即使它是上传),并且您需要弄清楚如何在每次打开IE时设置它。

HKCU\Software\Microsoft\Internet Explorer\DownloadDirectory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接