2017-01-05 2 views
4

Я хочу загрузить двоичный файл (изображения) в api, который принимает application/octet-stream. К сожалению, кажется Угловая хочет превратить мою просьбу, которая не работает, очевидно, и результаты в TypeError: key.charAt is not a function

Мой запрос выглядит следующим образом:

var f = document.getElementById('file_picker').files[0], 
r = new FileReader(); 
r.onloadend = function(e){ 
    var fileData = e.target.result; 
    $http({ 
     url: '.../upload/' + id, 
     method: 'PUT', 
     headers: {'Authorization': 'Bearer asdf', 
     'Content-Type': 'application/octet-stream'}, 
     data: new Uint8Array(fileData), 
     transformRequest: [] 
    }) 
}) 
r.readAsArrayBuffer(f); 

Это мой запрос через завиток, который работает:

curl -i -X PUT -H "Authorization: Bearer asdf" -H "Content-Type: application/octet-stream" --data-binary @jpg.jpg https://.../upload/123 

Любые идеи? Благодарю.

ответ

0

Рабочий раствор:

var file = document.getElementById('file_picker').files[0], 
reader = new FileReader(); 
reader.onload = function() { 
    var f = new Uint8Array(reader.result); 
    $http({ 
     url: '...upload/, 
     method: 'PUT', 
     headers: {'Authorization': 'Bearer asdf', 
       'Content-Type' : undefined}, 
     data: f, 
     transformRequest: [] 
     }); 
    }; 
reader.readAsArrayBuffer(file); 

Проблема заключается в том, мы имеем отображение перехватчик данных, сконфигурированный, который преобразует всю почту и поставить запросы JSON. Уч.

0

попробовать это:

  var fd = new FormData(); 
      fd.append("file", fileObj); 

      $http({ 
       method: "POST", 
       params: { 'forcecache': new Date().getTime() }, 
       url: <yoururl>, 
       headers: { 
        "Content-Type": undefined 
       }, 
       transformRequest: angular.identity, 
       data: fd 
      }); 

Это рабочий пример на одном из наших проектов. См http://www.uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs/ для более подробной информации

+0

Не работает для меня так, потому что контент, который я получаю в API, вероятно, ошибочен. Длина контента - 15. Не очень большой для изображения. – chrjs

+0

Обновление: содержимое запроса: «[object Object]». Вот почему длина контента составляет 15. – chrjs

Смежные вопросы