使用JavaScript时,如果您将输入标记设置如下...
<input type="file" multiple webkitdirectory directory />您可以通过执行以下操作来获取所选文件的相对路径...
document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath我的问题是,如何从输入标记中获得文件的相对路径,就像在PHP中一样?用PHP你可以得到一个文件名,类型,大小,但是你如何得到它的相对路径呢?
发布于 2019-02-20 07:52:25
相对目录在PHP中的工作方式与您认为的不同(根据您的JavaScript思维方式) --主要是因为PHP是服务器端,理论上可以访问操作系统内的任何文件(除非被监禁等) --您能找到的最接近的文件是$_SERVER['DOCUMENT_ROOT'],它将为您提供web根目录的相对路径--但是,如果您运行的是基于客户端的D9 --在<代码>D10中没有“相对根”,您只需使用./ (或者什么都不使用)、../、/来告诉php“与相关的与脚本所在的目录相同”IE
./directory/yourfile.txt //This starts in the SAME directory as the php file
../directory/yourfile.txt // This goes up one directory, and then you can drill back down.
../../../directory/directory/directory/file.txt // Just like above, but up 3 directories
/directory.file.txt // Starts from the server root -- IE /var/www/etc/etc/etc除了使用这些方法之外,您还可以编写自己的方法来处理这个问题,等等--在这方面也有许多学派。有人说,使用绝对路径是可行的……但其他人认为,对于可移植性而言,相对才是正确的方式。实际上,这取决于你的程序和你使用它的目的。无论是部署还是部署等等。如果是后者,而且是基于web的,$_SERVER['DOCUMENT_ROOT']就足够了,但是你应该组织你的程序,使类、控制器、模块等在编码时易于访问。(因此编写处理目录位置的方法)
根据您的评论进行更新
您问是否可以将其传递给php,答案是-可以,也不可以。
是,如果页面已经加载,并且您希望将信息作为操作(表单提交/ AJAX调用)的一部分发送
是,如果您已经加载了页面,并且在以前的页面/会话中存储了包含此信息的cookie
如果用户从未访问过该页面,并且已经发生了第一次页面加载,并且预计不会发生其他操作,如AJAX或表单提交,则不会。
var mypath = document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath
$.post("send_path_to_php.php", {path: mypath}, function(result){
alert(result); // result of php page response
});php文件将能够提取$_POST['path],然后您可以在php中做任何您想做的事情--无论您的echo/return在result的回调中是什么
发布于 2019-02-20 08:03:12
存储在计算机上的文件的相对路径对于PHP不可用,因为它是服务器端的。因此,一旦您提交了表单,您的文件就会包含在请求中,并且源路径不再可用。
但是您可以使用不同的技术( JavaScript向服务器发出异步请求的组合- AJAX或另一个字段,可以隐藏,存储文件路径信息)来将路径信息传递给服务器。
https://stackoverflow.com/questions/54776532
复制相似问题