AngularJs附件上传下载
首先: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附件上传下载的更多相关文章
- java附件上传下载磁盘版
ACTION public class UploadAction extends BaseAction { private static final long serialVersionUID = 1 ...
- java附件上传下载大字段版
public int up2(Map map) { StringBuffer insertSQL = new StringBuffer(); insertSQL.append("insert ...
- EBS开发附件上传和下载功能
上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统管理员文档:二是通过PL/SQL Gate ...
- EBS开发附件上传和下载功能(转)
原文地址: EBS开发附件上传和下载功能 上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统 ...
- java 附件上传、下载前后端代码
前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...
- angularjs + springmvc 上传和下载
jsp: <form ng-submit="uploadFile()" class="form-horizontal" enctype="mul ...
- 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径
本文是接上一篇博客,如果有疑问请先阅读上一篇:百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程 默认UEditor上传图片的路径是,编辑器包目录里面的net目录下 下面就演示如 ...
- Webwork 学习之路【07】文件上传下载
Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺 ...
- FastDFS实现文件上传下载实战
正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...
随机推荐
- 利用box-shadow制作loading图
我们见过很多利用css3做的loading图,像下面这种应该是很常见的.通常制作这种loading,我们会一个标签对应一个圆,八个圆就要八个标签.但是这种做法很浪费资源.我们可以只用一个标签,然后利用 ...
- struts-resultType属性
1.默认dispatcher:forward方式,服务器端跳转 2.redirect:客户端跳转 3.chain:Action转发,forward方式,服务器端跳转action 4.redirectA ...
- OpenNF tutorial复现
这篇博客记录了自己实现OpenNF官网上tutorial的过程和遇见的问题,如果有不对的地方还请批评指正! tutorial链接 实验内容 这个实验展示了如何迅速且安全地把一个TCP流从一个NF实例迁 ...
- lintcode395-硬币排成线 II
395-硬币排成线 II 有 n 个不同价值的硬币排成一条线.两个参赛者轮流从左边依次拿走 1 或 2 个硬币,直到没有硬币为止.计算两个人分别拿到的硬币总价值,价值高的人获胜. 请判定 第一个玩家 ...
- Windows上安装、配置MySQL的常见问题
一,MySQL的下载安装 MySQL的安装过程就不说了,基本上和一般软件的安装过程没什么两样,就是一路点next,设置的root用户的密码要牢记.具体教程可以参考:http://jingyan.bai ...
- Java throw try catch
public class Runtest { public static void main(String[] args) { // TODO Auto-generated method stub T ...
- 倒计时60s 代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【第一周】PSP
日期 C类别 C内容 S开始时间 E结束时间 I间隔(单位:分钟) T净时间(单位:分钟) 9月2日 编程 词频统计 7:35 9:35 10 110 9月3日 读书 构建之法 8:00 9:00 5 ...
- 补发9.26“天天向上”团队Scrum站立会议
组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.26 地点:612寝 组员 已完成 未完成 王森 可行性分析 找出设计亮点 张金生 寻找UI素材 设计用户操作 张政 搭建环境 基础逻辑框 ...
- Mac下Git的基础操作
目前最火的版本控制软件是Git了吧,今天简单梳理一下Mac下Git的基础操作~~ 一.什么是Git Git是一个分布式代码管理工具,用于敏捷的处理或大或小的项目,类似的工具还有svn. 基于Git的快 ...