最近項目中須要用到文件上傳,使用了angular-file-upload插件完成javascript
首先來介紹下這個插件的一些屬性(參考官方文檔)html
{String}
: 上傳文件的服務器路徑{String}
: 包含文件的名稱,默認是file{Array}
: 上傳隊列{Number}
: 上傳隊列的進度,只讀{Object}
: 上傳的頭文件信息, 瀏覽器需支持HTML5{Array}
: 與文件一塊兒發送的表單數據{Array}
: 在文件加入上傳隊列以前應用過濾器.,若是過濾器返回true則文件加入隊列中{Boolean}
: 文件加入隊列以後自動上傳,默認是false{String}
: 請求方式,默認是POST,瀏覽器需支持HTML5{Boolean}
: 文件上傳成功以後從隊列移除,默認是false{Boolean}
: 若是瀏覽器支持HTML5上傳則返回true,只讀{Boolean}
: 文件正在上傳中返回true,只讀{Number}
: 最大上傳文件數量(預約義){Boolean}
: 使用CORS,默認是false, 瀏覽器需支持HTML5function(files[, options[, filters]]) {
: Add items to the queue, where files
is a {FileList|File|HTMLInputElement}
, options
is an {Object}
andfilters
is a {String}
. 添加項到上傳隊列中,files
是 {FileList|File|HTMLInputElement},
options
是 {Object}
以及 filters
是 {String}
function(value) {
: Remove an item from the queue, wherevalue
is {FileItem}
or index of item. 從上傳隊列移除項,value
能夠是 {FileItem}
或者項的序號function() {
: Removes all elements from the queue. 移除上傳隊列全部的元素function(value) {
: Uploads an item, where value
is {FileItem}
or index of item. 上傳項, value
能夠是 {FileItem}
或者項的序號function(value) {
: Cancels uploading of item, where value
is{FileItem}
or index of item. 取消上傳的項function() {
: Upload all pending items on the queue. 將上傳隊列中全部的項進行上傳function() {
: Cancels all current uploads. 取消全部當前上傳function() {
: Destroys a uploader. function(value) {return {Boolean};}
: Returns true if value is {File}
. function(value) {return {Boolean};}
: Returns true if value is{FileLikeObject}
.function({FileItem}) {return {Number};}
: Returns the index of the{FileItem}
queue element. 返回項在上傳隊列中的序號function() {return {Array.<FileItems>};}
: Return items are ready to upload. 返回準備上傳的項function() {return {Array.<FileItems>};}
: Return an array of all pending items on the queue 返回上傳隊列中未上傳的項function(item) {
: 添加文件到上傳隊列後function(item, filter, options) {
: 添加文件到上傳隊列失敗後function(addedItems) {
: 添加所選的全部文件到上傳隊列後function(item) {
: 文件上傳以前function(item, progress) {
: 文件上傳中function(item, response, status, headers) {
: 文件上傳成功後function(item, response, status, headers) {
: 文件上傳失敗後function(item, response, status, headers) {
- 文件上傳取消後function(item, response, status, headers) {
: 文件上傳完成後function(progress) {
: 上傳隊列的全部文件上傳中function() {
: 上傳隊列的全部文件上傳完成後固然首先須要加入插件的jsjava
bowerweb
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'])
我這裏是上傳的圖片因此代碼以下:瀏覽器
1 <div ng-controller="addProduct"> 2 <div> 3 <lable>產品名稱</lable> 4 <input type="text" ng-model="productInfo.name"> 5 </div> 6 <div> 7 <lable>產品型號</lable> 8 <input type="text" ng-model="productInfo.type"> 9 </div> 10 <div> 11 <lable>產品圖片</lable> 12 <input type="file" name="photo" nv-file-select="" uploader="uploader" accept="image/*" ngf-max-size="2MB" ngf-model-invalid="errorFile" /></div> 13 <div><button class="btn btn-info" ng-click="addProduct()"></div> 14 </div>
這個是最簡單的使用主要是uploader這個屬性,其餘的accept、ngf-max-size、ngf-model-invalid都是一些限制圖片的屬性tomcat
1 myapp.controller('addProduct',['$scope','$http','FileUploader',function($scope,$http,FileUploader){ 2 3 //在外圍定義一個數組,賦值給formData,經過改變此數組,實現數據的改變 4 var productInfo=[]; 5 var uploader = $scope.uploader = new FileUploader({ 6 url: 'add', 7 formData:productInfo 8 }); 9 uploader.onSuccessItem = function(fileItem, response, status, headers) { 10 alert(response); 11 }; 12 $scope.addProduct = function() { 13 uploader.uploadAll(); 14 15 } 16 }])
1 @RequestMapping(value="add",method = RequestMethod.POST) 2 public ResponseEntity<Object> addProduct(@RequestParam("file") MultipartFile uploadFiles,ProductVo productVo){ 3 4 String fileName=uploadFile.getOriginalFilename(); 5 String prefix="."+fileName.substring(fileName.lastIndexOf(".")+1); 6 File dst=null; 7 try { 8 String root = System.getProperty("catalina.base"); //獲取tomcat根路徑 9 File uploadDir = new File(root, "webapps/upload"); //建立一個指向tomcat/webapps/upload目錄的對象 10 if (!uploadDir.exists()) { 11 uploadDir.mkdir(); //若是不存在則建立upload目錄 12 } 13 dst = new File(uploadDir, 14 UUID.randomUUID().toString()+prefix); //建立一個指向upload目錄下的文件對象,文件名隨機生成 15 uploadFile.transferTo(dst); //建立文件並將上傳文件複製過去 16 } catch (Exception e) { 17 e.printStackTrace(); 18 } 19 //而後把路徑set到productVo中 完成添加 "/upload/"+dst.getName(); 20 21 }
如此就完成了。服務器
在Js中給formData賦值 由於formData的new生成的因此 就是固定不變的,若是直接寫formData:[$scope.prodctInfo],就會致使formData沒有值,後臺就獲取不到其餘數據了。app
若是失敗的話能夠調用onBeforeUploadItem function(item)這個方法,給formData從新賦值,達到修改的目的。以下:
dom
uploader.onBeforeUploadItem function(item){ formData:「最終須要傳遞的值」 }