控制<input type =“file”/>的工作目录?

时间:2009-05-03 21:57:37

标签: javascript internet-explorer

全文: 我正在为我的公司开展一个项目,该项目要求我们每个位置的用户上传由第三方软件生成的报告。此软件生成的所有报告始终位于同一目录中。 我们的一些不太注重计算机的员工,根据过去(和持续)的经验来判断同样困难的任务:将发票下载/保存到供应商网站上的特定目录,将无法找到要上传的正确目录。

每个位置的计算机都运行Windows Server 2003,目前有IE6

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

我最初希望能够直接在输入值中设置文件,但这是因为在大多数浏览器中禁用了这个原因。 是可以通过javascript,还是只在HTML本身中控制用户按下浏览按钮时打开的目录?

如果没有,还有什么其他建议如何实现呢?甚至可以像在桌面上成功设置快捷方式一样简单,这将迫使浏览器使用所需的工作目录。 (IE显然忽略了'快捷方式'参数的快捷方式)

6 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

Google快速搜索产生了JUpload - 一个开源签名的Java小程序,似乎可以满足您的所有需求:http://jupload.sourceforge.net/

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

我确信还有很多其他类似的Java小程序,可能不会太难以推出自己的小程序。

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

答案 2 :(得分:1)

IE使用选择的最后一个文件夹进行文件上传。如果您可以控制客户端计算机,我的提示是;将驱动器号映射到文件所在的文件夹。这可以很容易地使用放在自动加载调用subst中的cmd文件来完成。然后指示用户手动输入驱动器号,因为它非常短,应该可以编写一个非常简单易懂的指令。祝你好运。

答案 3 :(得分:1)

简单地说,不可能做任何这样的事情。正如您所看到的,所有/大多数答案都与此声明一致,而那些不会误解该问题的声明。抱歉,您尝试做的事情被大多数浏览器视为安全风险。

答案 4 :(得分:0)

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

你可以使用一个activex控件,虽然那些东西已经过时了。有许多高级文件上传activex控件,我打赌你可以选择一个非常便宜。

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

HKCU\Software\Microsoft\Internet Explorer\DownloadDirectory

答案 5 :(得分:0)

这样做。 在这里,我需要确保用户在客户端本地图像路径上使用了输入图像文件。 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>