angular-file-upload+springMVC的使用
最近项目中需要用到文件上传,使用了angular-file-upload插件完成
首先来介绍下这个插件的一些属性(参考官方文档)
FileUploader
属性
- url
{String}: 上传文件的服务器路径 - alias
{String}: 包含文件的名称,默认是file
- queue
{Array}: 上传队列 - progress
{Number}: 上传队列的进度,只读 - headers
{Object}: 上传的头文件信息, 浏览器需支持HTML5 - formData
{Array}: 与文件一起发送的表单数据 - filters
{Array}: 在文件加入上传队列之前应用过滤器.,如果过滤器返回true则文件加入队列中
- autoUpload
{Boolean}: 文件加入队列之后自动上传,默认是false - method
{String}: 请求方式,默认是POST,浏览器需支持HTML5 - removeAfterUpload
{Boolean}: 文件上传成功之后从队列移除,默认是false - isHTML5
{Boolean}: 如果浏览器支持HTML5上传则返回true,只读 - isUploading
{Boolean}: 文件正在上传中返回true,只读 - queueLimit
{Number}: 最大上传文件数量(预定义) - withCredentials
{Boolean}: 使用CORS,默认是false, 浏览器需支持HTML5
方法
- addToQueue
function(files[, options[, filters]]) {: Add items to the queue, wherefilesis a{FileList|File|HTMLInputElement},optionsis an{Object}andfiltersis a{String}. 添加项到上传队列中,files是{FileList|File|HTMLInputElement},options是{Object}以及filters是{String} - removeFromQueue
function(value) {: Remove an item from the queue, wherevalueis{FileItem}or index of item. 从上传队列移除项,value可以是{FileItem}或者项的序号 - clearQueue
function() {: Removes all elements from the queue. 移除上传队列所有的元素 - uploadItem
function(value) {: Uploads an item, wherevalueis{FileItem}or index of item. 上传项,value可以是{FileItem}或者项的序号 - cancelItem
function(value) {: Cancels uploading of item, wherevalueis{FileItem}or index of item. 取消上传的项 - uploadAll
function() {: Upload all pending items on the queue. 将上传队列中所有的项进行上传 - cancelAll
function() {: Cancels all current uploads. 取消所有当前上传 - destroy
function() {: Destroys a uploader. - isFile
function(value) {return {Boolean};}: Returns true if value is{File}. - isFileLikeObject
function(value) {return {Boolean};}: Returns true if value is{FileLikeObject}. - getIndexOfItem
function({FileItem}) {return {Number};}: Returns the index of the{FileItem}queue element. 返回项在上传队列中的序号 - getReadyItems
function() {return {Array.<FileItems>};}: Return items are ready to upload. 返回准备上传的项 - getNotUploadedItems
function() {return {Array.<FileItems>};}: Return an array of all pending items on the queue 返回上传队列中未上传的项
回调函数
- onAfterAddingFile
function(item) {: 添加文件到上传队列后 - onWhenAddingFileFailed
function(item, filter, options) {: 添加文件到上传队列失败后 - onAfterAddingAll
function(addedItems) {: 添加所选的所有文件到上传队列后 - onBeforeUploadItem
function(item) {: 文件上传之前 - onProgressItem
function(item, progress) {: 文件上传中 - onSuccessItem
function(item, response, status, headers) {: 文件上传成功后 - onErrorItem
function(item, response, status, headers) {: 文件上传失败后 - onCancelItem
function(item, response, status, headers) {- 文件上传取消后 - onCompleteItem
function(item, response, status, headers) {: 文件上传完成后 - onProgressAll
function(progress) {: 上传队列的所有文件上传中 - onCompleteAll
function() {: 上传队列的所有文件上传完成后
使用
当然首先需要加入插件的js
bower
bower install angular-file-upload
在页面导入js
<script src="bower_components/angular-file-upload/dist/angular-file-upload.min.js"></script>
加入angularFileUpload
var myapp = angular.module('add',['angularFileUpload'])
html
我这里是上传的图片所以代码如下:
<div ng-controller="addProduct">
<div>
<lable>产品名称</lable>
<input type="text" ng-model="productInfo.name">
</div>
<div>
<lable>产品型号</lable>
<input type="text" ng-model="productInfo.type">
</div>
<div>
<lable>产品图片</lable>
<input type="file" name="photo" nv-file-select="" uploader="uploader" accept="image/*" ngf-max-size="2MB" ngf-model-invalid="errorFile" /></div>
<div><button class="btn btn-info" ng-click="addProduct()"></div>
</div>
这个是最简单的使用主要是uploader这个属性,其他的accept、ngf-max-size、ngf-model-invalid都是一些限制图片的属性
Js
myapp.controller('addProduct',['$scope','$http','FileUploader',function($scope,$http,FileUploader){
//在外围定义一个数组,赋值给formData,通过改变此数组,实现数据的改变
var productInfo=[];
var uploader = $scope.uploader = new FileUploader({
url: 'add',
formData:productInfo
});
uploader.onSuccessItem = function(fileItem, response, status, headers) {
alert(response);
};
$scope.addProduct = function() {
uploader.uploadAll();
}
}])
java
@RequestMapping(value="add",method = RequestMethod.POST)
public ResponseEntity<Object> addProduct(@RequestParam("file") MultipartFile uploadFiles,ProductVo productVo){ String fileName=uploadFile.getOriginalFilename();
String prefix="."+fileName.substring(fileName.lastIndexOf(".")+1);
File dst=null;
try {
String root = System.getProperty("catalina.base"); //获取tomcat根路径
File uploadDir = new File(root, "webapps/upload"); //创建一个指向tomcat/webapps/upload目录的对象
if (!uploadDir.exists()) {
uploadDir.mkdir(); //如果不存在则创建upload目录
}
dst = new File(uploadDir,
UUID.randomUUID().toString()+prefix); //创建一个指向upload目录下的文件对象,文件名随机生成
uploadFile.transferTo(dst); //创建文件并将上传文件复制过去
} catch (Exception e) {
e.printStackTrace();
}
//然后把路径set到productVo中 完成添加 "/upload/"+dst.getName(); }
如此就完成了。
主要问题
在Js中给formData赋值 因为formData的new生成的所以 就是固定不变的,如果直接写formData:[$scope.prodctInfo],就会导致formData没有值,后台就获取不到其他数据了。
如果失败的话可以调用onBeforeUploadItem function(item)这个方法,给formData重新赋值,达到修改的目的。如下:
uploader.onBeforeUploadItem function(item){
formData:“最终需要传递的值”
}
angular-file-upload+springMVC的使用的更多相关文章
- angularjs file upload插件使用总结
之前由于项目需要,决定使用angularjs做前端开发,在前两个项目中都有文件上传的功能,因为是刚接触angularjs,所以对一些模块和模块间的依赖不是很了解.都是由其他大神搭好框架,我只做些简单的 ...
- html5 file upload and form data by ajax
html5 file upload and form data by ajax 最近接了一个小活,在短时间内实现一个活动报名页面,其中遇到了文件上传. 我预期的效果是一次ajax post请求,然后在 ...
- Angular2 File Upload
Angular2 File Upload Install Install the components npm install ng2-file-upload --save github: https ...
- Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_upload.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显 ...
- [AngularFire] Angular File Uploads to Firebase Storage with Angular control value accessor
The upload class will be used in the service layer. Notice it has a constructor for file attribute, ...
- jquery file upload示例
原文链接:http://blog.csdn.net/qq_37936542/article/details/79258158 jquery file upload是一款实用的上传文件插件,项目中刚好用 ...
- jQuery File Upload 单页面多实例的实现
jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...
- jQuery File Upload done函数没有返回
最近在使用jQuery File Upload 上传图片时发现一个问题,发现done函数没有callback,经过一番折腾,找到问题原因,是由于dataType: ‘json’造成的,改为autoUp ...
- kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
- 【转发】Html5 File Upload with Progress
Html5 File Upload with Progress Posted by Shiv Kumar on 25th September, 2010Senior Sof ...
随机推荐
- JavaScript原生数组函数
有趣的JavaScript原生数组函数 在JavaScript中,可以通过两种方式创建数组,构造函数和数组直接量, 其中后者为首选方法.数组对象继承自Object.prototype,对数组执行typ ...
- 搞定KMP匹配算法
KMP算法介绍及实现——轻松搞定KMP匹配算法 本文介绍了字符串匹配算法中的BF算法和KMP算法.本文中KMP算法介绍部分是关于KMP算法相关文章中最简洁的一篇文章之一.下一篇将继续介绍Horspoo ...
- AngularJS框架研究(一)
和几年前相比,现在的Javascript开发方式有了翻天覆地的变化,一些极具创意的开发工具的出现,让前端开发更加成熟,Angular框架就是一个例子.最近在看Angular的源代码,发现并不是件容易的 ...
- Leetcode::Pathsum & Pathsum II
Pathsum Description: Given a binary tree and a sum, determine if the tree has a root-to-leaf path su ...
- RTB撕开黑盒子 Part 1: Datacratic's RTB Algorithms
这篇文章是讨论Datacratic所用的统计和经济理论的一些内容.我们开发了real time bidding算法s.为了实现广告主的目标,我们的算法自动地利用其它广告主的次优策略,并再查看广告的底价 ...
- Window Service 计划任务
在ASP.NET中创建计划任务,就我个人而言,用过两种方式,一种是用SQL Server创建,把写好的SSIS包导入SQL Server创建的任务中,设置好时间让它去执行.还有一种就是利用window ...
- excel==>csv==via phpmyadmin (edit php.ini & my.ini)==> MySQL Database
正如同标题, 标题的顺序是 先从Excel表单,保存为csv文档. 步骤: 1.这个可以用linux下的libra office打开 abc.xls 2.用libra office 将 abc.xls ...
- 【Linux】Shell学习笔记之四——文件和目录管理(硬连接和软连接)
在这节将要学习linux的连接档,在之前用"ls -l" 查看文件属性的命令时, 其中第二个属性是连接数.那么这个连接数是干什么的?这就要理解inode. 先说一下文件是怎么存储的 ...
- Android Apk获取包名和Activity名称
一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ...
- java ArrayList的序列化分析
一.绪论 所谓的JAVA序列化与反序列化,序列化就是将JAVA 对象以一种的形式保持,比如存放到硬盘,或是用于传输.反序列化是序列化的一个逆过程. JAVA规定被序列化的对象必须实现java.io.S ...