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

第一步:引用angularjs的脚本:ng-file-upload-shim.min.js 和 ng-file-upload.min.js

第二步:在angularjs的controller中注入:ngFileUpload

例如:angular.module('liaoyuan.controllers', ['ui.bootstrap', 'ngFileUpload', 'ng.ueditor']);

第三部:写代码

一、上传

1、前台的html代码

  <form>
<!-- <input class="form-control update-input" ngf-select type="file" ng-model="file" name="file" readonly="readonly" /> -->
<div class="content">
<label class="update-label">请选择上传的文件位置:</label> <input class="filename" type="text" readonly="readonly" />
<a href="javascript:;" class="file-a" name="file">
<input class="file" ngf-select type="file" ng-model="file" name="file" readonly="readonly" />浏览...
</a>
</div>
<button type="button" class="btn btn-primary update-button" style="" ng-click="submit()">
上传
</button>
<script type="text/javascript">
var file = $('.file'),
aim = $('.filename');
file.on('change', function( e ){
var name = e.currentTarget.files[0].name;
aim.val( name );
});
</script>
</form>

2、angularjs 控制器Controller中的代码

 app.controller('FileController', function ($scope, $uibModalInstance, Upload) {
//取消
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
//上传按钮
$scope.submit = function () {
$scope.upload($scope.file);
}; $scope.upload = function (file) {
$scope.fileInfo = file;
Upload.upload({
//服务端接收
method: 'POST',
url: 'http://localhost:56897/api/serviceLogAttachments',
file: file
}).progress(function (evt) {
//进度条
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progess:' + progressPercentage + '%' + evt.config.file.name);
}).success(function (newAttachment) {
//上传成功
$uibModalInstance.close(newAttachment);
}).error(function (data, status, headers, config) {
//上传失败
console.log('error status: ' + status);
});
}; });

注意:Upload一定要注入

3、后台上传代码

 [HttpPost]
public IHttpActionResult PostAttachment()
{
int logId = ;
HttpContext.Current.Response.ContentType = "application/json";
HttpFileCollection files = HttpContext.Current.Request.Files;
HttpRequestMessage h = new HttpRequestMessage();
var file = files[];
string fileExt = Path.GetExtension(file.FileName); string attachmentName = file.FileName.Substring(, file.FileName.LastIndexOf(".")); string fileNewName = attachmentName + DateTime.Now.ToString("yyyyMMddHHmmssfff")+ fileExt; string strRelativeDir = "/Upload/服务管理/日志详情附件/"; string fliePath = HttpContext.Current.Request.MapPath(strRelativeDir);
if (!Directory.Exists(fliePath))
{
Directory.CreateDirectory(fliePath);
}
string strSavePath = Path.Combine(fliePath, fileNewName);
file.SaveAs(strSavePath);
//插入数据库
ServiceLogAttachmentService.AddAttachment(attachment);
return CreatedAtRoute("DefaultApi", new{id = attachment.AttachmentID}, attachment);
}

二、下载

1、前台下载代码

方法一:直接访问后台数据(但此方法在前后台有授权与验证的时候,会不方便)

  //附件下载
$scope.fileDown = function (url, name) {
window.location.href = "http://localhost:56888/api/ServiceStateChanges?url=" + url + "&fileName=" + name;
}

方法二:在请求数据时在header上加上验证的token

  //附件下载
$scope.fileDown = function (url, name) {
var xhr = new XMLHttpRequest();
xhr.responseType = "blob"; xhr.open("GET", "http://localhost:56888/api/ServiceStateChanges?url=" + url + "&filename=" + name + "", true); xhr.setRequestHeader("Authorization", 'Bearer ' + currUser.token); xhr.onreadystatechange = function (e) {
if (this.readyState == 4) {
var response = this.response;
var URL = window.URL || window.webkitURL || window;
var link = document.createElement('a');
link.href = URL.createObjectURL(response);
link.download = name;
var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
link.dispatchEvent(event);
}
}
xhr.send(null);
}

2、后台下载代码

  public HttpResponseMessage GetFile(string url,string fileName)
{
try
{
var FilePath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/"+ url);
System.IO.FileStream stream=null;
stream = new FileStream(FilePath, FileMode.Open);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
return response;
}
catch
{
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}

注:仅个人理解及笔记,有误的地方请各位大神指正!

AngularJs附件上传下载的更多相关文章

  1. java附件上传下载磁盘版

    ACTION public class UploadAction extends BaseAction { private static final long serialVersionUID = 1 ...

  2. java附件上传下载大字段版

    public int up2(Map map) { StringBuffer insertSQL = new StringBuffer(); insertSQL.append("insert ...

  3. EBS开发附件上传和下载功能

    上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统管理员文档:二是通过PL/SQL Gate ...

  4. EBS开发附件上传和下载功能(转)

    原文地址: EBS开发附件上传和下载功能 上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统 ...

  5. java 附件上传、下载前后端代码

    前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...

  6. angularjs + springmvc 上传和下载

    jsp: <form ng-submit="uploadFile()" class="form-horizontal" enctype="mul ...

  7. 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径

    本文是接上一篇博客,如果有疑问请先阅读上一篇:百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程 默认UEditor上传图片的路径是,编辑器包目录里面的net目录下 下面就演示如 ...

  8. Webwork 学习之路【07】文件上传下载

    Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺 ...

  9. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

随机推荐

  1. 第一次作业(homework-01)成绩公布

    已收到博客名.github名的同学得分列表: 学号后三位 成绩(0-10) 215 8082 0132 5184 5027 7194 9.5157 7074 8195 6222 8158 6128 8 ...

  2. resx文件引用

    应用场景: 自己在编写双语界面的时候,用到两种语言表. 引用如下: LocRM = new ResourceManager("TMI_E.words_" + lang.ToLowe ...

  3. Alpha冲刺——第七天

    Alpha第七天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  4. DP---(POJ1159 POJ1458 POJ1141)

    POJ1159,动态规划经典题目,很适合初学者入门练手. 求:为了使字符串左右对称,应该插入的最小字符数目. 设字符串为S1 S2 S3 - Sn. 这个字符串有n个字符,根据DP的基本思路,减少问题 ...

  5. 前端系列之HTML基础知识概述

    1.什么是HTML HTML:Hyper Text Markup Language :超文本标记语言. 超文本:功能比普通文本更加强大. 标记语言:使用一组标签对内容进行描述的语言,它不是编程语言. ...

  6. String、StringBuilder与StringBuffer的区别

    1.String类是public.final修饰的. 在Java中,被final修饰的类是不允许被继承的,并且String它的成员方法都默认为final方法. 查看源码得知,String类其实是通过c ...

  7. Alpha - Postmortem

    Alpha - Postmortem NewTeam 2017/11/18 目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队角色.管理.合作 总结 设想和目标 返回目录 1. 软件 ...

  8. 【第五周】alpha发布之小组评论

    对于昨天的阿尔法发布,有那么几点需要说一下: 1,对这次阿尔法发布的过程,我们组还是基本顺利的,由于之前吃过亏,这次我提前试用了一下投影仪,做了些调试,之后的发布过程起码设备上是正常的. 2,我们的项 ...

  9. 因为NLS_LANG 造成 Oracle数据库丢失 中文字符集兼容问题的处理.

    接着上一封blog. 因为sqlplus的 乱码问题 我修改了 注册表里面 NLS_LANG 的 value值.主要改动为: NLS_LANG source: SIMPLIFIED CHINESE_C ...

  10. 对mysql联合索引中的字段进行合理排序

    在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度: 但是对联合索引中字段顺序的合理排序,便更能提高速度 例子:select * ...