angularJS从base64制作二进制数据图像并作为图像文件发送到服务器

时间:2015-01-25 14:23:28

标签: javascript jquery angularjs crop

我使用此工具在AngularJS应用中裁剪图像:https://github.com/fengyuanchen/cropper

然后我尝试将数据存储到服务器,但现在我发送base64代码...我怎样才能发送正常的裁剪图像二进制代码,而不是base64?这是真的吗?

我上传的代码就是这样:

var addImage = function(files) {
      var deferred = $q.defer();
      var fd = new FormData();      

      var blob = new Blob([files], { type : "image/png"});
      fd.append("file", blob);

      $http.post(settings.apiBaseUri + "/files", fd, {
          withCredentials: true,
          headers: {
            'Content-Type': undefined
          },
          transformRequest: angular.identity
        })
        .success(function(data, status, headers, config) {
          url = data.Url;
          deferred.resolve(url);
        })
        .error(function(err, status) {

        });
      return deferred.promise;
    };

在这里我发送base64代码:

  $scope.photoChanged = function(files) {
    $scope.oldImg = angular.element(document.querySelector('#avatar-id'));
    $scope.files = files;        
    var reader = new FileReader();
    reader.onload = function(e) {
      $scope.imagecontent = e.target.result;
    };
    reader.readAsDataURL(files[0]);
  };

  $scope.setCroppedData = function(data) {
    $('#avatar-id').attr('src', data);
    $scope.nImg = new Image();
    $scope.nImg.src = data;  // data - is base64 image code
  }
  ...
  uploaderService.addImage($scope.nImg.src).then(function(url) {
    $scope.person.AvatarUrl = url;
    $scope.updateContactQuery();
  });
  ...

我怎么能像没有任何裁剪一样发送:发送图像文件,以便我可以通过浏览器中的链接查看图像,但不是字节64代码???

1 个答案:

答案 0 :(得分:2)

您可以将base64数据包装在ArrayBuffer中,然后转换为二进制图像数据,如:

var binaryImg = atob(base64Image);
var length = binaryImg.length;
var arrayBuffer = new ArrayBuffer(length);
var uintArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < length; i++) {
    uintArray[i] = binaryImg.charCodeAt(i);
}

我认为uintArray就是你想要的。