[Angularjs]ng-file-upload上传文件

写在前面

最近在弄文档库的H5版,就查找了下相关的上传组件,发现了ng-upload的东东,推荐给大家。

系列文章

[Angularjs]ng-select和ng-options

[Angularjs]ng-show和ng-hide

[Angularjs]视图和路由(一)

[Angularjs]视图和路由(二)

[Angularjs]视图和路由(三)

[Angularjs]视图和路由(四)

[Angularjs]ng-class,ng-class-even,ng-class-odd

[Angularjs]单页应用之分页

[Angularjs]国际化

[Angularjs]ng-repeat中使用ng-model遇到的问题

[Angularjs]过滤器

ng-file-upload

angular-file-upload 是一款轻量级的 AngularJS 文件上传工具,为不支持浏览器的 FileAPI polyfill 设计,使用 HTML5 直接进行文件上传。

特性

  • 支持上传进度,在上传的时候,可以取消或者中止,支持文件拖拽(HTML5),目录拖拽(weikit),CORS,PUT(html5)/POST 方法
  • 支持使用 Flash polyfill FileAPI  跨浏览器上传 (HTML5 和 non-HTML5) 。允许客户端在上传之前验证或者修改文件。
  • 当文件的内容类型使用 $upload.http()时,支持直接上传到 CouchDB,imgur 等等。支持 Angular httpPOST/PUT 请求的进度事件,更多内容请看 #88(comment)
  • Separate shim file loaded on demand for non-HTML5 code meaning no extra load/code if you just need HTML5 support. (Note that html5-shim.js is still needed for progress event in HTML5 browsers)
  • 轻量级,使用常规的 $http 来上传(支持非 HTML5 浏览器),所以提供所有 Angular $http 功能。

一个例子

需要的js文件,可以去这里下载:https://github.com/danialfarid/ng-file-upload

<!DOCTYPE html>
<html ng-app="app">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>文件上传</title>
    <meta charset="utf-8" />
    <script src="JS/angular.min.js"></script>
    <script src="JS/ng-file-upload.min.js"></script>
    <script src="JS/ng-file-upload-shim.min.js"></script>
    <script>
        var app = angular.module(‘app‘, [‘ngFileUpload‘]);
        app.controller(‘FileController‘, function ($scope, Upload) {            $scope.uploadImg = ‘‘;
            //提交
            $scope.submit = function () {
                $scope.upload($scope.file);
            };
            $scope.upload = function (file) {
                $scope.fileInfo = file;
                Upload.upload({
                    //服务端接收
                    url: ‘Ashx/UploadFile.ashx‘,
                    //上传的同时带的参数
                    data: { ‘username‘: $scope.username },
                    file: file
                }).progress(function (evt) {
                    //进度条
                    var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                    console.log(‘progess:‘ + progressPercentage + ‘%‘ + evt.config.file.name);
                }).success(function (data, status, headers, config) {
                    //上传成功
                    console.log(‘file ‘ + config.file.name + ‘uploaded. Response: ‘ + data);
                    $scope.uploadImg = data;
                }).error(function (data, status, headers, config) {
                    //上传失败
                    console.log(‘error status: ‘ + status);
                });
            };
        });
    </script>
</head>
<body>
    <form ng-controller="FileController">
        <img src="{{uploadImg}}"/> 当前上传用户:<input type="text" placeholder="请输入您的名称" name="name" ng-model="username"/><div class="button" ngf-select ng-model="file" name="file" ngf-pattern="‘image/*" accept="image/*" ngf-max-size="20MB" ngf-min-height="100">Select</div><button type="submit" ng-click="submit()">submit</button> {{fileInfo.name}}<br /> {{fileInfo.size}} </form></body></html>

简单测试

其中data中存的为我们上传文件的同时,需要的参数。

完整的例子,上传成功并在页面上进行预览。

public class UploadFile : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            var paras = context.Request.Params["data"];
            JObject jobj = JObject.Parse(paras);
            string strUserName = jobj["username"].ToString();
            HttpFileCollection files = context.Request.Files;
            if (files.Count > 0)
            {
                var file = files[0];
                string fileExt = Path.GetExtension(file.FileName);
                string fileNewName = Guid.NewGuid() + fileExt;
                string strRelativeDir = "/Upload/" + strUserName;
                string strDir = context.Request.MapPath(strRelativeDir);
                if (!Directory.Exists(strDir))
                {
                    Directory.CreateDirectory(strDir);
                }
                string strSavePath = Path.Combine(strDir, fileNewName);
                file.SaveAs(strSavePath);
                context.Response.Write(Path.Combine(strRelativeDir, fileNewName));
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

总结

使用ng-file-upload可以很好的与angularjs结合。在使用的时候,查找了一下angularjs相关的文件上传的例子,如果浏览器支持html5,那也可以很方便的制作进度条,另外该组件也支持多文件上传。推荐给大家。

你可以去这里进行下载:https://github.com/danialfarid/ng-file-upload

时间: 2024-10-26 02:44:42

[Angularjs]ng-file-upload上传文件的相关文章

php 下 html5 XHR2 + FormData + File API 上传文件

FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormData的最大优点就是我们可以异步上传一个二进制文件. 例1如下: <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>

element-ui upload上传文件并携带参数 使用formData对象

需求:上传文件的时候,需要携带其他的参数 问题:使用upload上传文件时,必须使用formData对象,而其他的参数通过data获取的到的,formData和data是不能同时传输的 解决:获取到的data数据,使用formData.append()方法添加上就可以啦,然后把整个formData传给后台就可以了 比如后台需要三个参数 :file .platformName.reconciliationData let formData = new FormData(); formData.ap

struts2 File标签上传文件

1.action.class private File pictureType; private String pictureTypeContentType; private String pictureTypeFileName; public String editType() throws IOException{ Type t=typeService.find(Type.class, id); System.out.println("id="+id); System.out.pr

input type=&#39;file&#39;限制上传文件类型

前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so  easy啊,没什么嘛,就是几行 js 代码就能搞定的事.是的,简单的文件上传是可以直接使用FormData()对象将文件上传:如果问题只是这么简单就好了,可能大家也都遇到过上传文件类型的限制,不知道大家有没有注意到这么简单的方法将文件类型过滤,下面直接贴代码: 1. js实现:js实现上传文件类型的限制是将允许上传的文

input(file)异步上传文件

页面 <input id="file" name="file" type="file"><button id="btn" type="button">上传</button> //异步上传文件var $file = $('#file');$('#btn').click(function() { var data = new FormData(); data.append('

upload上传文件

上传Excel文件代码demo: 下载上传js文件:bower install ng-file-uploa:引入js文件: angular.module('dc.workflow', [ 'ngFileUpload']); js代码:var data=this.data={file:null};//定义data.file为空: this.selectImage = function (file) { this.errorFileType = false; if (file[0].type !=

Windows 使用ssh secure file transfer上传文件到linux服务器

SSH Secure Shell Client是SSH命令行控制终端,你应该是用SSH Secure File Transfer Client传输文件.这里只谈论他的使用方法,关于SSH配置你再找其他文章.一.登陆方法你可以在登陆的SSH Secure Shell Client里单击工具栏里(或菜单)的New File Transfer Window,就直接登陆了.也可以单独运行SSH Secure File Transfer Client.登陆非常简单,填写Host Name(你的服务器地址或

angularJS 在edge浏览器上传文件,无法主动触发ng-click

今天发现的问题 在谷歌浏览器一直运行良好的功能,在edge浏览器不能使用. 代码参考我的另一篇博客:WebAPI Angularjs 上传文件 不能运行的原因 下图红框中的代码在edge浏览器中无法执行,也就不能执行下面的上传文件代码. 解决方案 既然原因找到了,就可以寻找解决方案了,找了一下午,有一篇有用的文章:angular ng-click程序触发,方法 我的解决方案(注意加粗加大的代码[关键哟]) JS代码如下: define(['app'], function (app) { app.

input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。

不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为input的value值,只有再内容发生改变的时候去触发,而value在上传文件的时候保存的是文件的内容,你只需要在上传成功的回调里面,将当前input的value值置空即可.event.target.value='';

input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。

不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为input的value值,只有再内容发生改变的时候去触发,而value在上传文件的时候保存的是文件的内容,你只需要在上传成功的回调里面,将当前input的value值置空即可.event.target.value=''; 转自https://www.cnblogs.com/imsomnus/p/62