在angularjs中查找文件路径

时间:2017-10-14 11:50:07

标签: angularjs html5

我在angularJS中有一个函数,我需要在上传时获取文件的路径。这是代码

$scope.uploadFile = function (element) {
    $scope.filetemplate = false;
    $scope.spinround2 = true;
    var filename = event.target.files[0].name;
    var filepath = event.target.value;
    }

问题是我将文件路径作为c:/ fakepath,即使我尝试从任何驱动器中检索文件。有人可以为此提供解决方案。

1 个答案:

答案 0 :(得分:0)

出于明显的安全原因,浏览器不会公开本地文件路径。

来自HTML5文档:

  

由于历史原因,value IDL属性在文件名前面加上字符串"C:\fakepath\"。某些旧版用户代理实际上包含完整路径(这是一个安全漏洞)。因此,以向后兼容的方式从value IDL属性获取文件名是非常重要的。以下函数以适当的兼容方式提取文件名:

function extractFilename(path) {
  if (path.substr(0, 12) == "C:\\fakepath\\")
    return path.substr(12); // modern browser
  var x;
  x = path.lastIndexOf('/');
  if (x >= 0) // Unix-based path
    return path.substr(x+1);
  x = path.lastIndexOf('\\');
  if (x >= 0) // Windows-based path
    return path.substr(x+1);
  return path; // just the file name
}
     

可以使用如下:

<p><input type=file name=image onchange="updateFilename(this.value)"></p>
<p>The name of the file you picked is: <span id="filename">(none)</span></p>
<script>
 function updateFilename(path) {
   var name = extractFilename(path);
   document.getElementById('filename').textContent = name;
 }
</script>
     

— HTML Living Standard - The definition of <input type="file">