文件上传并了解目录结构
File Upload and knowing the directory structure
我们使用jquery fileupload将文件(和文件夹)从本地计算机拖放到浏览器。这很好,但我们无法捕获文件夹中文件的目录结构。我理解为什么(从安全角度和javascript)这不起作用,但有人想过实现同样目的的最佳方法吗。
同样,我希望我的客户(内部应用程序)将文件夹拖放到我的应用程序中。我的应用程序可以看到文件名列表并上传,但我希望维护这些文件的目录结构,以便在其他地方使用。也就是说,我必须知道它来自目录x/1/a而不是y/2/b。
提前感谢!
请参阅jquery文件上传对此的支持,这与@Dead133s提到的webkitdirectory有关https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support
"可以选择一个完整的文件夹结构,尽管目前只有谷歌Chrome支持。要启用此功能,必须在文件输入字段中添加以下供应商特定的目录属性:"
<input type="file" name="files[]" multiple directory webkitdirectory mozdirectory>
另一个低技术的解决方案是让用户压缩文件并上传,保留任何文件夹。
文件API:目录和系统目前是W3C工作草案,已经在webkit中工作,在最新的Chrome和Safari中工作。
有一个很好的文件上传示例,您可以下拉一个目录并查看其结构:http://sapphion.com/2012/06/keep-directory-structure-when-uploading/
很棒的html5rocks教程:http://www.html5rocks.com/en/tutorials/file/filesystem/#toc-dir
您可以使用与此类似的文件系统API的自定义实现,甚至只使用DropzoneJS,然后使用与下面类似的算法来构建每个目录中所属目录和文件的哈希映射。我在下面包含了一些示例代码,这些代码应该会将您推向正确的方向。
uploadFilesDepthFirst(folderId, folderInfo) {
Object.keys(folderInfo.children).forEach(childFolderName => uploadFilesDepthFirst(folder.id, folderInfo.children[childFolderName]));
folderInfo.files.map(file => uploadFile(folderId, file.file));
}
let fileList = files.map((file) => { return {path: file.fullPath, filename: file.name , file: file} });
const hierarchy = {}; // {folder_name} = { name: <name of folder>, children: {...just like hierarchy...}, files: [] }
// build tree
fileList.map(file => {
const paths = file.path.split('/').slice(0, -1);
let parentFolder = null;
// builds the hierarchy of folders.
paths.map(path => {
if (!parentFolder) {
if (!hierarchy[path]) {
hierarchy[path] = {
name: path,
children: {},
files: [],
};
}
parentFolder = hierarchy[path]
} else {
if (!parentFolder.children[path]) {
parentFolder.children[path] = {
name: path,
children: {},
files: [],
};
}
parentFolder = parentFolder.children[path];
}
});
parentFolder.files.push(file);
});
Object.keys(hierarchy).map(folderName => uploadFilesDepthFirst(parentId, hierarchy[folderName]));
- 更改JSON对象的结构
- 角度控制器结构
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 如何在Analytics.js中始终了解最新的cookie过期时间
- 使用递归属性迭代保留属性结构
- 如何将我的json结构转换为C3.js所需的列结构
- 嵌套对象结构
- 了解双击代码标记
- Redux应用程序结构-在哪里放置服务/业务逻辑
- 用于视频类型的MongoDB结构's
- javascript和php中的pancard结构验证
- 使用代码了解 JavaScript 中的反应式扩展
- 在Hapi.js Restful API中了解请求IP
- Ajax POST请求没有'我不了解PHP
- 文件上传并了解目录结构
- 了解基本的jQuery结构
- 了解 Firefox 扩展结构
- 了解如何在javascript/HTML5/NodeJS中实现客户端-服务器-客户端基础结构
- 在写jquery插件等滑块之前,我想了解一下结构
- 了解node.js服务器目录结构和安全性