HTML 5文件阅读器读取javaScript文件

前端之家收集整理的这篇文章主要介绍了HTML 5文件阅读器读取javaScript文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图允许用户将包含 javascript文件文件夹拖放到html 5页面.这就是我目前拥有的:
  1. $scope.files = [];
  2.  
  3. //Establish dropzone
  4. var dropBox;
  5. dropBox = document.getElementById("fileDragAndDrop");
  6. dropBox.addEventListener("dragenter",dragenter,false);
  7. dropBox.addEventListener("dragover",dragover,false);
  8. dropBox.addEventListener("drop",drop,false);
  9.  
  10. //Events
  11. function dragenter(e) {
  12. e.stopPropagation();
  13. e.preventDefault();
  14. };
  15. function dragover(e) {
  16. e.stopPropagation();
  17. e.preventDefault();
  18. };
  19. function drop(e) {
  20. e.stopPropagation();
  21. e.preventDefault();
  22.  
  23. var items = e.dataTransfer.items;
  24.  
  25. for (var i = 0,item; item = items[i]; i ++) {
  26. var entry = item.webkitGetAsEntry();
  27.  
  28. if(entry) {
  29. traverseFileTree(entry);
  30. }
  31. }
  32. };
  33.  
  34. //resursive file walker
  35. function traverseFileTree(item) {
  36. if(item.isFile) {
  37. $scope.$apply(function () {
  38. $scope.files.push(item);
  39. });
  40. } else if (item.isDirectory) {
  41. var dirReader = item.createReader();
  42. dirReader.readEntries(function(entries) {
  43. for (var i = 0; i < entries.length; i++) {
  44. traverseFileTree(entries[i]);
  45. }
  46. });
  47. }
  48. };

所以拖放工作,但我有阅读文件内容的问题.

  1. $scope.parse = function () {
  2.  
  3. for(var i = 0; i < $scope.files.length; i++) {
  4.  
  5. var fileReader = new FileReader();
  6.  
  7. fileReader.onload = function (e) {
  8.  
  9. console.log(fileReader.result);
  10. };
  11.  
  12. fileReader.onerror = function(err) {
  13. console.log(err);
  14. };
  15.  
  16. fileReader.readAsBinaryString($scope.files[i]);
  17. }
  18. };

我没有收到任何错误消息,这使得调试很困难.难道我做错了什么?有没有人有任何问题做类似的任务?

解决方法

不确定你的$scope是什么,但是试一试.

当您使用webkitGetAsEntry()时,我认为这适用于Chrome.从它的外观来看,你的代码应该给你一个错误.如果没有,可能会遗漏一些东西.你通常应该得到类似的东西:

Uncaught TypeError: Failed to execute ‘readAsBinaryString’ on ‘FileReader’: The argument is not a Blob.

在你的$scope.parse函数中.

有一些问题.一个是你可能会读取files as text而不是二进制字符串.其次,不推荐使用readAsBinaryString(),如果要读取二进制数据,请使用readAsArrayBuffer().

此外,webkitGetAsEntry()返回一个FileEntry,因此你应该得到上面提到的错误.要读取您通常可以执行的文件

  1. $scope.files[i].file(success_call_back,[error_call_back]);

例如:

  1. function my_parser(file) {
  2. var fileReader = new FileReader();
  3.  
  4. fileReader.onload = function (e) {
  5. console.log(fileReader.result);
  6. };
  7.  
  8. fileReader.onerror = function(err) {
  9. console.log(err);
  10. };
  11. console.log('Read',file);
  12. // Here you could (should) switch to another read operation
  13. // such as text or binary array
  14. fileReader.readAsBinaryString(file);
  15. }
  16.  
  17. $scope.files[0].file(my_parser);

这将为您提供一个File对象作为my_parser()的参数.然后你通常可以检查.type并使用适当的读取功能. (虽然要注意MIME类型的松弛.如:不要依赖它,而是用它作为提示.)

  1. if (file.type.match(/application\/javascript|text\/.*/)) {
  2. // Use text read
  3. } else if (file.type.match(/^image\/.*/)) {
  4. // Use binary read,read as dataURL etc.
  5. } else ...

猜你在找的HTML相关文章