六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 258|回复: 0

HTML5拖拽上传文件,chrome文件夹上传

[复制链接]

升级  24%

22

主题

22

主题

22

主题

秀才

Rank: 2

积分
86
 楼主| 发表于 2013-1-29 13:43:14 | 显示全部楼层 |阅读模式
最近被安排做一个拖拽上传和文件夹上传的功能,不考虑兼容性,哈哈这个可以用HTML5实现。这里就不仔细学习HTML5,我只是想找例子,然后偷过来用,至于原理边用边学。
 
首先这里有一个很好的实例实现拖拽上传:http://blogs.sitepointstatic.com/examples/tech/filedrag/1/index.html
仔细看完估计原理你也会懂的。
 
然后是文件夹上传这里也有一个很好的实例:http://sapphion.com/2011/11/html5-folder-upload-with-webkitdirectory/ 这里文件夹上传只能在chrome11以后使用。
 
可是并不是那么一帆风顺,故事发生了:
 
文件夹上传的时候,如果文件夹内还有文件夹上面的那个例子就不能运行了,同时也不能保持目录结构。
 
js的方便就在于调试方便,更有利器console.log(obj).下面的内容是在仔细看了上面两个实例的基础上:
 
在第一个例子中有一个函数ParseFile,我在里面加了一个console.log(file),然后再chrome下面看到如下调试信息:


有了这个路径属性,我就可用在ajax中把次属性当做参数,用于保存目录结构。
 
 
xhr.open("POST", "upload.php?fname="+file.webkitRelativePath, true);然后upload.php添加处理函数:
function createFolder($path) {    if (!file_exists($path)) {        createFolder(dirname($path));        mkdir($path,0777);    }}$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);    $fname = $_GET['fname'];    if ($fname!=''&& $fname!='undefined') {        createFolder('uploads/'.dirname($fname));        $targetfile = 'uploads/' . $fname;    }else{        $targetfile = 'uploads/'.$fn;    }// AJAX callif (file_put_contents($targetfile,file_get_contents('php://input'))){    echo "ok";}else{    echo "failed";} 
 
于是解决了多次文件夹上传的功能。
-----------------------------------------------
代码依次是:实例1(拖拽上传),实例2(文件夹上传),修改后的多层文件夹上传(细节请包容),
 
体验HTML5的魅力请参考:http://html5-demos.appspot.com/
 
http://html5-demos.appspot.com/static/html5storage/demos/upload_directory/index.html
 
最新代码请查看 https://github.com/xiaoshenge/html5demo
                      http://html5file.sinaapp.com/(效果演示,由于sae有上传限制)
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表