網路上可以找到的AngularJS 的檔案上傳控制項有兩個:
angular-file-upload:https://github.com/nervgh/angular-file-upload
-file-upload:https://github.com/danialfarid/ng-file-upload
這兩個非常類似,連js檔案的結構都是一樣的。核心的js是.min.js,還都有一個-shim.min.js,用來支援上傳進度條和上傳暫停等進階功能。
照道理講shim.js應該是可加可不加,但實測-shim.min.js必須包含,否則有js檔案載入問題。但是angular-file-upload-shim.min.js這個檔案在github上不存在! ! !
所以用ng-file-upload!用ng-file-upload!用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 http POST/PUT 请求的进度事件 轻量级,使用常规的 $http 来上传(支持非 HTML5 浏览器),所以提供所有 Angular $http 功能
<!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"/> <p class="button" ngf-select ng-model="file" name="file" ngf-pattern="'image/*" accept="image/*" ngf-max-size="20MB" ngf-min-height="100">Select</p> <button type="submit" ng-click="submit()">submit</button> {{fileInfo.name}}<br/> {{fileInfo.size}} </form></body></html>
這是前端頁面,後端如果用Java的話可以用commons-fileupload等檔案上傳類別庫。
注意
如果後端使用了Struts等框架,框架的過濾器會自動處理http請求中的上傳的檔案部分,造成在Servlet中取得不到請求的檔案資料。
解決方法一是更改Struts設定文件,將檔案上傳的過濾器改為我們自己寫的空白過濾器
解決方法二是像submit一個帶有的form表單一樣,讓Struts自動取得到上傳的檔案。只需要在Servlet中加入一個File類型的屬性,並加入get/set方法。屬性的名字一定要是file! ! !
以上是AngularJS 檔案上傳控制項 ng-file-upload的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!