我正在尝试在我的应用程序中实现拖放操作,这需要删除文件夹的完整路径。
我做过类似的事情
<html>
<head>
<style>
#dropzone {
height:200px;
width: 200px;
border: 10px dashed #0c0;
background-color:cyan;
}
</style>
</head>
<body>
<div id="dropzone" droppable="true" ondrop ="drop(event)" ondragenter="return false" ondragover="return false">
</div>
<script type="text/javascript">
function drop(e) {
e.stopPropagation();
e.preventDefault();
var length = e.dataTransfer.items.length;
for (var i = 0; i < length; i++) {
var entry = e.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
alert(entry);//here i need to get path of folder being dropped.
}
}
}
</script>
</body>
</html
如果我在e.dataTransfer.files[i].name
内警告for loop
,那么它只显示文件夹的名称,但不显示其路径。
javascript是否允许访问本地文件系统?或者任何解决方法。
答案 0 :(得分:1)
javascript是否允许访问本地文件系统?###
短吻...... :不。
那么如何获取已删除文件夹的完整路径?
这很容易,您需要做的就是将删除的项目作为文件。
它有什么变化?
在上面的代码中,您有e.dataTransfer.items[i].webkitGetAsEntry()
。
webkitGetAsEntry()方法非常有用,因为它返回''Entry''对象。你可以做很酷的事情,例如:
现在, getAsFile()方法返回一个文件对象,其中包含与实际文件相关的所有好东西。看看下面的代码(我修改了你的代码)。
/*
* Store your data for an easy access.
*/
var items = e.dataTransfer.items;
/*
* Loop through items.
*/
for (var i = 0; i < items.length; i++)
{
// Get the dropped item as a 'webkit entry'.
var entry = items[i].webkitGetAsEntry();
if (entry.isDirectory)
{
/*
* getAsFile() returns a File object that contains
* some useful informations on the file/folder that has
* been dropped.
*
* You get the following properties :
* - lastModified (timestamp)
* - lastModifiedDate
* - name (...of the file)
* - path (fullpath)
* - size
* - type
* - etc. (...some other properties and methods)
*
* So you can do the following to retrieve the path of the
* dropped folder.
*/
alert(items[i].getAsFile().path);
}
}
var items = e.dataTransfer.items; // -- Items
for (var i = 0; i < items.length; i++)
{
// Get the dropped item as a 'webkit entry'.
var entry = items[i].webkitGetAsEntry();
// Get the same dropped item, but as a File.
var file = items[i].getAsFile();
if (entry.isDirectory)
{
alert(file.path);
}
}
如您所见,没有什么能阻止您同时使用。您将获得''Entry''对象以检查您是否正在处理文件夹或文件,然后您可以使用 getAsFile()方法来访问相关信息丢弃的项目(如路径)。
希望它有所帮助!
答案 1 :(得分:1)
答案 2 :(得分:-4)
尝试
e.dataTransfer.files[0].path
将为您提供文件夹路径。