使用jQuery获取文件输入的选定文件名而不使用路径

mar*_*rky 147 javascript jquery filenames get

我用过这个:

$('input[type=file]').val()
Run Code Online (Sandbox Code Playgroud)

获取文件名,但它返回完整路径,如"C:\ fakepath\filename.doc"."fakepath"部分实际上就在那里 - 不确定它是否应该是,但这是我第一次使用文件上传的文件名.

我怎样才能获得文件名(filename.doc)?

man*_*nji 283

var filename = $('input[type=file]').val().split('\\').pop();
Run Code Online (Sandbox Code Playgroud)

或者你可以这么做(因为C:\fakepath出于安全原因,它总是被添加):

var filename = $('input[type=file]').val().replace(/C:\\fakepath\\/i, '')
Run Code Online (Sandbox Code Playgroud)

  • @MikeDeSimone我测试了split('\\').pop(); 在Win 7,Ubuntu 11.04和Mac OS X上它可以正常工作. (16认同)
  • @Alex:哇,这太疯狂了.所以它实际上只是一个解决方案,从某些人的糟糕的JS代码回来永远不会修复.我在Mac上运行Safari,我在那里看到"C:\ fakepath \".(在[jsfiddle](http://jsfiddle.net/daQD6/)中播放.) (3认同)

Die*_*ini 68

你只需要做下面的代码.第一个[0]是访问HTML元素,第二个[0]是访问文件上传的第一个文件(如果没有文件,我包括验证):

    var filename = $('input[type=file]')[0].files.length ? ('input[type=file]')[0].files[0].name : "";
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 23

Chrome C:\fakepath\...出于安全原因返回- 网站无法获取有关您计算机的信息,例如计算机上文件的路径.

要获取字符串的文件名部分,您可以使用split()...

var file = path.split('\\').pop();
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

......或正则表达式 ......

var file = path.match(/\\([^\\]+)$/)[1];
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

......或lastIndexOf()......

var file = path.substr(path.lastIndexOf('\\') + 1);
Run Code Online (Sandbox Code Playgroud)

jsFiddle.


Kot*_*lla 18

获取所有操作系统的路径

var filename = $('input[type=file]').val().replace(/.*(\/|\\)/, '');
Run Code Online (Sandbox Code Playgroud)

C:\fakepath\filename.doc 
/var/fakepath/filename.doc
Run Code Online (Sandbox Code Playgroud)

两人都回归

filename.doc
filename.doc
Run Code Online (Sandbox Code Playgroud)


小智 13

我是这样做的,它运作得很好.

在你的HTML中:

<input type="file" name="Att_AttributeID" onchange="fileSelect(event)" class="inputField" />
Run Code Online (Sandbox Code Playgroud)

然后在你的js文件中创建一个简单的函数:

function fileSelect(id, e){
    console.log(e.target.files[0].name);
}
Run Code Online (Sandbox Code Playgroud)

如果您正在执行多个文件,您还应该通过循环遍历此列表来获取列表:

e.target.files[0].name
Run Code Online (Sandbox Code Playgroud)


小智 8

也许是为了避免伪路径的一些补充:

var fileName = $('input[type=file]').val();
var clean=fileName.split('\\').pop(); // clean from C:\fakepath OR C:\fake_path 
alert('clean file name : '+ fileName);
Run Code Online (Sandbox Code Playgroud)


小智 7

这个选择似乎是最合适的。

$('input[type="file"]').change(function(e){
        var fileName = e.target.files[0].name;
        alert('The file "' + fileName +  '" has been selected.');
});
Run Code Online (Sandbox Code Playgroud)


Ber*_*ron 5

这样的事怎么样?

var pathArray = $('input[type=file]').val().split('\\');
alert(pathArray[pathArray.length - 1]);
Run Code Online (Sandbox Code Playgroud)