2012-02-15 409 views
0

使用html5 javascript时,如何在用户选择文件时获取文件路径? 我需要在这个例子中使用的文件路径:html5获取文件路径

用户上传一个文件,暂停它(我知道迄今为止我认为只有mozilla可以做到这一点),然后关闭浏览器并计划恢复文件明天。我需要知道这个文件的文件路径。

+1

不管怎样,你将无法重新启动文件上传。 – ceejayoz 2012-02-15 21:18:46

+0

是否有任何其他的编程语言,能够重新启动文件上传除了java .. – Harts 2012-02-15 21:25:56

+0

任何可以做到这一点的东西都必须有某种插件。 – ceejayoz 2012-02-15 22:18:41

回答

8

即使你确实有一个路径(一些浏览器用来给你),也没有办法设置类型文件的输入路径。

因此,不可能用普通的JS和DOM来做你想做的事情。

我说这是不可能的,但现在你问我确实认为有一种方法,用新的File API。以下步骤概述了需要完成的工作,但没有经过测试,我不指望它能够工作,只是为了向您展示方式,全局变量也很糟糕,它只是向您展示您的最简单方法。这里是举例一个很好的页面上使用File API http://www.html5rocks.com/en/tutorials/file/dndfiles/

首先您需要的文件类型的输入,那么你可以一旦用户选择一个文件使用,您将得到对文件的访问对象。 http://dev.w3.org/2006/webapi/FileAPI/#dfn-filereader

<input type="file" id="files" name="files[]" multiple /> 
<script> 
    var fileBlobs = []; 
    function handleFileSelect(evt) { 
    var files = evt.target.files; // FileList object 

    // files is a FileList of File objects. You may now read their contents 
    var reader = new FileReader(); 
    for (var i = 0, f; f = files[i]; i++) { 
     fileBlobs.push(reader.readAsBinaryString(f)); 
    } 
    }  
    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 

现在你有内容作为二进制字符串。您可以使用文件API来存储文件在本地的方式,你可以在以后使用的FileWriter和FileSaver接口http://dev.w3.org/2009/dap/file-system/file-writer.html

var bb = new BlobBuilder(); 
bb.appendfileBlobs.(fileBlobs[0]); 
window.saveAs(bb.getBlob(), "test_file"); 

你需要做一个Ajax请求通过该斑点对服务器的访问,跟踪多少上传完成。 http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute。它看起来不像跟踪进度可以在客户端上完成。您可能必须轮询服务器以获取实际进度。知道从何处开始中断上传的一种可能的解决方案是使用上传ID,并且当您重新启动上传时,可以询问服务器上传了多少文件。

对不起,我不能提供完整的答案,但这不是一个简单的问题。我给你的步骤应该带你走向正确的方向。

+0

@JuanMendes ..所以有无论如何做这个暂停/恢复功能,除了使用Java /闪存?我认为HTML5具有FileAPI,所以我认为我们可以通过html – Harts 2012-02-15 21:34:36

+0

@ user1096900来完成。看看我修改后的答案。 – 2012-02-16 00:00:58

0

就像你不能在几天内提交一个HTTP请求一样,你也不能用文件上传来完成。该协议不会允许它。因此,整个努力是徒劳的。

+0

但我们可以欺骗它吗?使用HTML5 File API中的片段上传部分 – Harts 2012-02-15 21:29:20

+0

HTML5的强大功能将永远无法覆盖HTTP指向的内容。该协议由服务器设置,而不是客户端。 – 2012-02-15 21:32:55

0

据我所知,这是不可能的,因为Javascript只能访问通过file输入或拖放共享的文件。