国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

AngularJS上傳文件的示例代碼

2019-11-19 12:32:29
字體:
來源:轉載
供稿:網友

使用AngularJS上傳文件

  • 前臺是Angular頁面
  • 后臺使用SpringBoot/SpirngMVC

上傳文件

html

<div>  <input id="fileUpload" type="file" />  <button ng-click="uploadFile()">上傳</button></div>

js

    $scope.upload = function(){      var form = new FormData();      var file = document.getElementById("fileUpload").files[0];      form.append('file', file);      $http({        method: 'POST',        url: '/upload',        data: form,        headers: {'Content-Type': undefined},        transformRequest: angular.identity      }).success(function (data) {        console.log('upload success');      }).error(function (data) {         console.log('upload fail');      })    }

注意:

  • AngularJS默認的'Content-Type'是application/json ,通過設置'Content-Type': undefined,這樣瀏覽器不僅幫我們把Content-Type 設置為 multipart/form-data,還填充上當前的boundary,
  • 如果手動設置為:'Content-Type': multipart/form-data,后臺會拋出異常:the request was rejected because no multipart boundary was found
  • boundary 是隨機生成的字符串,用來分隔文本的開始和結束
  • 通過設置 transformRequest: angular.identity ,anjularjs transformRequest function 將序列化我們的formdata object,也可以不添加

后臺

  @RequestMapping("/upload")  public void uploadFile(@RequestParam(value = "file" , required = true) MultipartFile file) {    //deal with file  }

注意

文件必須通過@RequestParam注解來獲取,且需指定value才能獲取到

這樣就完成了上傳文件

上傳文件的同時傳遞其他參數

html

  <div>    <input id="fileUpload" type="file" />    <button ng-click="ok()">上傳</button><br>    <input ng-model="user.username" />    <input ng-model="user.password" />  </div>

js

  $scope.ok = function () {    var form = new FormData();    var file = document.getElementById("fileUpload").files[0];      var user =JSON.stringify($scope.user);    form.append('file', file);    form.append('user',user);    $http({      method: 'POST',      url: '/addUser',      data: form,      headers: {'Content-Type': undefined},      transformRequest: angular.identity    }).success(function (data) {      console.log('operation success');    }).error(function (data) {      console.log('operation fail');    })  };

注意

需要將Object轉為String后在附加到form上,否則會直接被轉為字符串[Object,object]

后臺

  @RequestMapping("/upload")  public Map<String, Object> upload(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "user", required = true) String user) {    try (FileInputStream in = (FileInputStream) headImg.getInputStream();       FileOutputStream out = new FileOutputStream("filePathAndName")) {      //將Json對象解析為UserModel對象      ObjectMapper objectMapper = new ObjectMapper();      UserModel userModel = objectMapper.readValue(user, UserModel.class);      //保存文件到filePathAndName      int hasRead = 0;      byte[] bytes = new byte[1024];      while ((hasRead = in.read(bytes)) > 0) {        out.write(bytes, 0, hasRead);      }    } catch (IOException e) {      e.printStackTrace();    }  }

注意

ObjectMapper為com.fasterxml.jackson.databind.ObjectMapper

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松桃| 成安县| 铜山县| 綦江县| 台南县| 肥城市| 石狮市| 长武县| 韶山市| 彩票| 响水县| 龙里县| 嘉峪关市| 镇赉县| 沧州市| 定襄县| 侯马市| 尖扎县| 县级市| 禹州市| 太仓市| 砚山县| 泰安市| 湘乡市| 汉源县| 昭平县| 庆城县| 嘉善县| 玉树县| 鄯善县| 宣化县| 四子王旗| 封开县| 公安县| 博白县| 会泽县| 新兴县| 溧阳市| 洪湖市| 施甸县| 无极县|