当用户在网页中选择文件时,我希望能够仅提取文件名。
我尝试过使用 str.search 函数,但是当文件名类似于c:\uploads\ilike.this.file.jpg时,它似乎会失败。
我们如何提取没有扩展名的文件名呢?
当用户在网页中选择文件时,我希望能够仅提取文件名。
我尝试过使用 str.search 函数,但是当文件名类似于c:\uploads\ilike.this.file.jpg时,它似乎会失败。
我们如何提取没有扩展名的文件名呢?
要拆分字符串({filepath}/{filename})并获取文件名,可以使用以下代码:
str.split(/(\\|\/)/g).pop()
"pop() 方法会删除数组的最后一个元素,并返回该元素的值给调用者。"
Mozilla 开发者网络
例子:
从:"/home/user/file.txt".split(/(\\|\/)/g).pop()
你会得到:"file.txt"
现在有一种更简单的方法:
var fileInput = document.getElementById('upload');
var filename = fileInput.files[0].name;
.name
之前,检查fileInput.files.length
以防用户点击了取消。 - marcovtwoutvar fullPath = document.getElementById('upload').value;
if (fullPath) {
var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
var filename = fullPath.substring(startIndex);
if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
filename = filename.substring(1);
}
alert(filename);
}
filename = filename.substring(0, filename.lastIndexOf('.'));
因为他的方法无法处理扩展名超过3个字符的文件,例如:.html、.jpeg等。 - Yetivar startIndex = Math.max(fullPath.lastIndexOf('\\'), fullPath.lastIndexOf('/')) + 1;
- nollidge非常简单
let file = $("#fileupload")[0].files[0];
file.name
假设:
<input type="file" name="file1" id="theFile">
JavaScript代码将是:
var fileName = document.getElementById('theFile').files[0].name;
我猜你想去掉所有的扩展名,比如将/tmp/test/somefile.tar.gz
变成somefile
。
使用正则表达式的直接方法:
var filename = filepath.match(/^.*?([^\\/.]*)[^\\/]*$/)[1];
使用正则表达式和数组操作的替代方法:
var filename = filepath.split(/[\\/]/g).pop().split('.')[0];
var pieces = str.split('\\');
var filename = pieces[pieces.length-1];
输入: C:\path\Filename.ext
输出: Filename
在HTML代码中,将文件的onChange
值设置为以下内容...
<input type="file" name="formdata" id="formdata" onchange="setfilename(this.value)"/>
<input type="text" name="wpName" id="wpName">
JavaScript
<script>
function setfilename(val)
{
filename = val.split('\\').pop().split('/').pop();
filename = filename.substring(0, filename.lastIndexOf('.'));
document.getElementById('wpName').value = filename;
}
</script>
<html>
<body>
<script type="text/javascript">
// Useful function to separate path name and extension from full path string
function pathToFile(str)
{
var nOffset = Math.max(0, Math.max(str.lastIndexOf('\\'), str.lastIndexOf('/')));
var eOffset = str.lastIndexOf('.');
if(eOffset < 0 && eOffset < nOffset)
{
eOffset = str.length;
}
return {isDirectory: eOffset === str.length, // Optionally: && nOffset+1 === str.length if trailing slash means dir, and otherwise always file
path: str.substring(0, nOffset),
name: str.substring(nOffset > 0 ? nOffset + 1 : nOffset, eOffset),
extension: str.substring(eOffset > 0 ? eOffset + 1 : eOffset, str.length)};
}
// Testing the function
var testcases = [
"C:\\blabla\\blaeobuaeu\\testcase1.jpeg",
"/tmp/blabla/testcase2.png",
"testcase3.htm",
"C:\\Testcase4", "/dir.with.dots/fileWithoutDots",
"/dir.with.dots/another.dir/"
];
for(var i=0;i<testcases.length;i++)
{
var file = pathToFile(testcases[i]);
document.write("- " + (file.isDirectory ? "Directory" : "File") + " with name '" + file.name + "' has extension: '" + file.extension + "' is in directory: '" + file.path + "'<br />");
}
</script>
</body>
</html>
isDirectory
中添加&& nOffset+1 === str.length
后,将输出以下内容:
&& eOffset < nOffset
)。 - YetiEasy Path:
JQuery
$("#fileInputId").on("change", () => {
alert($("#fileInputId")[0].files[0].name);
});
JavaScript
document.getElementById("fileInputId").onchange = function() {
alert(document.getElementById("fileInputId").files[0].name)
};
var filename = filepath.replace(/^.*?([^\\\/]*)$/, '$1');
。 - vog[\\/]
。此外,还要求去除文件扩展名。完整的解决方案请参见:https://dev59.com/s3RA5IYBdhLWcg3wsgPq#32156800 - vog(\\|\/)
的“长”正则表达式版本(而不是短的[\\/]
)可以处理不同操作系统上的不同路径名语法,对吗?在 Windows 上是C:\path\Filename.ext
,在 Linux 和 macOS 上是home/path/Filename.ext
。 - wnm