最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

AngularJS上传文件的示例代码

来源:动视网 责编:小采 时间:2020-11-27 22:04:15
文档

AngularJS上传文件的示例代码

AngularJS上传文件的示例代码:使用AngularJS上传文件 前台是Angular页面 后台使用SpringBoot/SpirngMVC 上传文件 html <div> <input id=fileUpload type=file /> <button ng-click=uploadFile()>上传</
推荐度:
导读AngularJS上传文件的示例代码:使用AngularJS上传文件 前台是Angular页面 后台使用SpringBoot/SpirngMVC 上传文件 html <div> <input id=fileUpload type=file /> <button ng-click=uploadFile()>上传</


使用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

    文档

    AngularJS上传文件的示例代码

    AngularJS上传文件的示例代码:使用AngularJS上传文件 前台是Angular页面 后台使用SpringBoot/SpirngMVC 上传文件 html <div> <input id=fileUpload type=file /> <button ng-click=uploadFile()>上传</
    推荐度:
    标签: 文件 代码 File
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top