当前位置: 首页 > 面试题库 >

用于angularjs的文件上传器集成

高和通
2023-03-14
问题内容

是否存在一个良好的文件上传器,并且具有良好的AngularJS集成(指令)?

我正在寻找易于样式设置并支持HTML5拖放等功能的东西。

有人可能会说,使用现有的上载器并将其集成到AngularJS中很容易-我会说:如果这很容易,那么有人应该已经做到了。


问题答案:

实际上,我曾经滚动过自己的上载器……但仅是因为我不喜欢任何已经制成的JQuery上载器。不幸的是,这是专有的,我无法在互联网上发布它……但是……我可以向您展示如何使用Angular的几乎所有JQuery插件:

可能有人会说,使用现有的上载器并将其集成到AngularJS中很容易-我会说:如果这很容易,那么有人应该已经做到了。

假设我有一个jQuery插件,可以通过选择一个div并调用pluginUploadCall()它来工作…

app.directive('myJqueryPluginUploader', function() {
   return {
      restrict: 'A',
      link: function(scope, elem, attr, ctrl) {
          // elem is a jQuery lite object
          // or a jQuery object if jQuery is present.
          // so call whatever plugins you have.
          elem.pluginUploadCall();
      }
   };
});

这就是它的用法。

<div my-jquery-plugin-uploader></div>

Angular实际上与jQuery集成得非常好,因此任何在jQuery中工作的插件都应该在Angular中很容易地工作。想要保持DependencyInjection有效,以便使AngularApp处于可测试状态,这是唯一的棘手问题。jQuery在DI方面不是很擅长,因此您可能不得不跳过一些麻烦。

如果您想自己动手,我可以告诉您我做了这样的事情:

app.directive('customUploader', function(){
    return {
       restrict: 'E',
       scope: {},
       template: '<div class="custom-uploader-container">Drop Files Here<input type="file" class="custom-uploader-input"/><button ng-click="upload()" ng-disabled="notReady">Upload</button></div>',
       controller: function($scope, $customUploaderService) {
          $scope.notReady = true;
          $scope.upload = function() {
             //scope.files is set in the linking function below.
             $customUploaderService.beginUpload($scope.files);
          };
          $customUploaderService.onUploadProgress = function(progress) {
             //do something here.
          };
          $customUploaderService.onComplete = function(result) {
             // do something here.
          };
       },
       link: function(scope, elem, attr, ctrl) {
          fileInput = elem.find('input[type="file"]');
          fileInput.bind('change', function(e) {               
               scope.notReady = e.target.files.length > 0;
               scope.files = [];
               for(var i = 0; i < e.target.files.length; i++) {
                   //set files in the scope
                   var file = e.target.files[i];
                   scope.files.push({ name: file.name, type: file.type, size: file.size });
               }
          });
       }
});

您在其中$customUploaderService创建的自定义服务Module.factory()$http用于发布文件并检查服务器上的进度。

我知道这很模糊,很抱歉我能提供所有这些,但是希望对您有所帮助。

编辑:拖放文件上传是CSS,BTW的一个技巧,对于Chrome和FF,您要做的是将其放入包含div的文件中……然后执行以下操作:

<div class="uploadContainer">Drop Files Here<input type="file"/></div>



div.uploadContainer {
   position: relative;
   width: 600px;
   height: 100px;
}

div.uploadContainer input[type=file] {
   visibility: hidden;
   position: absolute;
   top: 0;
   bottom: 0;
   left: 0;
   right: 0;
}

…现在,您在该div上放置的所有内容实际上都会在文件上传中删除,您可以使div看起来像您想要的任何内容。



 类似资料:
  • 这是我的超文本标记语言形式: 我想从本地机器上传图像,并希望读取上传文件的内容。所有这些我都想使用AngularJS来完成。 当我试图打印它是未定义的。

  • 问题内容: 这是我的HTML表单: 我想从本地计算机上传图像,并想读取上传文件的内容。我想使用AngularJS进行的所有操作。 当我尝试打印时,它的值是未定义的。 问题答案: 这里的一些答案建议使用,但不幸的是,这是Internet Explorer 9及更低版本中不可用的浏览器对象。如果需要支持那些较旧的浏览器,则需要使用或使用Flash 的备份策略。 已经有许多Angular.js模块可以执

  • 问题内容: Java控制器类: html文件: 角js: 这是我在服务器日志中无法理解的错误: 问题答案: 尝试以下方法。对我来说很好。 HTML你应该有 注意输入的名称。 然后在JS控制器方法中 现在在您的Java Controller类中 希望这对您有用。并且也要进行异常处理。

  • 问题内容: Java控制器类: html文件: 角js: 这是我在服务器日志中无法理解的错误: 问题答案: 尝试以下方法。对我来说很好。 HTML你应该有 注意输入的名称。 然后在JS控制器方法中 现在在您的Java Controller类中 希望这对您有用。并且也要进行异常处理。

  • 问题内容: 我有一个Java Spring MVC Web应用程序作为服务器。并且基于AngularJS的应用程序作为客户端。 在AngularJS中,我必须上传文件并发送到服务器。 这是我的 html 这是我的 UploadController.js 它要发送到服务器。这是我的 DocumentUploadController.java 运行此命令时,出现以下异常 在我的 application

  • 问题内容: 我已经审查了有关此主题的问题和答案,但我认为它们不能完全回答我的问题: 使用有角度的前端(无论采用哪种方式)进行上传,都会将文件数据发送到服务器上的脚本(例如php脚本)(这是我的首选方法)。一旦运行了php脚本,我想返回到进行上传的页面并在其中提供消息。我不希望显示php页面。将不胜感激如何实现这一目标的一些指导。理想情况是将什么代码添加到php脚本中。 我想捕获与文件有关的信息并将