自定义图片点击, 上传文件

14 篇文章 0 订阅

本文是用angularjs框架和$resource组件实现的,不过原理都是大同小异
注意重点: 设置请求的Content-Type头为undefined.
Angularjs 对于post和put请求, 默认的Content-Type是application/json, w我们需要改变它的值. 通过设置Content-Type为undefined, 浏览器会设置Content-Type为multipart/form-data, 并且会自动填充正确的分界(boundary).
手动设定Content-Type为multipart/form-data , 会导致请求的分界参数填充失败.

可以参考这个链接
http://blog.csdn.net/five3/article/details/7181521

html

    <!--添加图片-->
    <div style="margin-top: 2rem;">
      <div style="padding: 1rem 0;"><p>添加图片</p></div>
      <div style="display: flex; justify-content: flex-start; align-items: flex-start; flex-wrap: wrap; height: 14rem;">
        <div class="images_upload" ng-repeat="image in uploadedImages track by $index" ng-click="removeImage(image)"
          style="background-image: url({{image}}); ">
        </div>

        <div class="images_upload" onclick="document.getElementById('uploadImage').click()" ng-if="uploadedImages.length< 8"
          style="background-image: url(img/orders/jh@2x.png); background-size: inherit;">
        </div>
        <input id="uploadImage"  type="file" accept="image/*" multiple="true" style="display: none;">
      </div>
    </div>

js_controller

    var isUploading = false;
    //选取图片绑定时事件
    var uploadedButton = document.getElementById('uploadImage');
    uploadedButton.onchange = function()
    {
      //发请求
      isUploading = true;
      var formData = new FormData();
      for(var index=0; index<uploadedButton.files.length; index++)
      {
        if (index+$scope.uploadedImages.length >= 8)
        {
          break;
        }
        formData.append('file', uploadedButton.files[index]);
      }

      //接口上传
      buyerOrderService.uploadPictures(formData).then(
        function(data)
        {
          isUploading = false;
          utilsService.console_info(data, '图片返回数据:');

          if (!data || !data instanceof Array)
          {
            utilsService.console_error(data, '图片返回数据不规格;');
            return;
          }
          //页面展示
          for(var index=0; index<data.length; index++)
          {
            $scope.uploadedImages.push(data[index].data);
          }
        },
        function(error)
        {
          isUploading = false;
          utilsService.alert({template: '<a>图片上传失败,请稍后尝试</a>'})
        });
    };

    //删除图片
    $scope.removeImage = function(imageUrl)
    {
      $scope.uploadedImages.splice($scope.uploadedImages.indexOf(imageUrl), 1);
    };

js_service

      //resource的配置: 
      uploadPictures: {
        url: requestUrl + '/upload/batch.do',/*/upload.do*/
        isArray: true,
        method: 'POST',
        //这个很重要,必须加上
        headers: {'Content-Type': undefined}
      }

   /**
     * 上传图片
     */
    service.uploadPictures = function(params)
    {
      return resource.uploadPictures(params).$promise;
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值