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

最近被安排做一个拖拽上传和文件夹上传的功能,不考虑兼容性,哈哈这个可以用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中把次属性当做参数,用于保存目录结构。

 

 

Js代码   收藏代码
  1. xhr.open("POST""upload.php?fname="+file.webkitRelativePath, true);  

然后upload.php添加处理函数:

Php代码   收藏代码
  1. function createFolder($path) {  
  2.     if (!file_exists($path)) {  
  3.         createFolder(dirname($path));  
  4.         mkdir($path,0777);  
  5.     }  
  6. }  
  7.   
  8. $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);  
  9.   
  10.   
  11.     $fname = $_GET['fname'];  
  12.     if ($fname!=''&& $fname!='undefined') {  
  13.         createFolder('uploads/'.dirname($fname));  
  14.         $targetfile = 'uploads/' . $fname;  
  15.     }else{  
  16.         $targetfile = 'uploads/'.$fn;  
  17.     }  
  18.     // AJAX call  
  19.     if (file_put_contents($targetfile,file_get_contents('php://input'))){  
  20.         echo "ok";  
  21.     }else{  
  22.         echo "failed";  
  23.     }  
  24.       

 

 

于是解决了多次文件夹上传的功能。

-----------------------------------------------

代码依次是:实例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有上传限制)

 

 

原文链接的评论有最新的demo地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值