2015-04-10 1 views
0

В Угловом, есть способ послушать ответ на запрос, который вы сами не делаете? В частности, я осуществление загрузки файла Node.js, и я отправка формы программно:Угловая: как слушать ответ, который вы сами не делаете?

HTML:

<form enctype = "multipart/form-data" 
     action = "/blah/fileupload" 
     method = "post" 
      id = "upload_file" 
> 
    <input type="file" onchange="angular.element(this).scope().onFileSelect(event)" name="bulk_uploads" /> 
</form> 

Угловая контроллер:

$scope.onFileSelect = function(event) 
    { 
    var form_elem = document.getElementById('upload_file');  
    form_elem.submit(); 
    } 

Этот вопрос отправка формы таким образом, не возвращает обещание, и если я отправлю форму следующим образом:

$http.post('/blah/fileupload', { files : event.target.files }) 

то нет способа получить загруженные файлы после того, как он попадет на сервер узла (например, req.files пуст).

Есть ли способ прослушать ответ сервера на «blah/fileupload», представив форму программно, как я сейчас делаю, или я об этом неправильно?

ПРИМЕЧАНИЕ. Я надеюсь не использовать Interceptors API ради производительности. Если нет большого удара производительности, тогда, пожалуйста, дайте мне знать!

ответ

0

Хотя это не ответ на мой конкретный ", как мне создать конечную точку обслуживания с угловой стороны?" вопрос, я смог решить проблему, возникшую у меня, прочитав содержимое файла в клиенте, прежде чем размещать эти данные на сервере:

var fileInput = document.getElementById('upload_file'); 
fileInput.addEventListener('change', onFileSelect); 

function onFileSelect(event) 
{ 
    var fileList = event.target.files; 
    for (var i = 0, totalFiles = fileList.length; i < totalFiles; ++i) 
    { 
    var file = fileList.item(i); 
    var fileReader = new FileReader(); 
    fileReader.addEventListener('load', onFileLoad); 
    fileReader.readAsText(file); 
} 

var fileData = new Array(); 
function onFileLoad(event) 
{ 
    fileData.push(event.target.result); 

    if (fileData.length == totalFiles) 
    { 
    sendFilesToServer(fileData); 
    } 
} 


function sendFilesToServer(fileData) 
{ 
    $http.post('/blah/fileupload', { files : fileData }) 
     .success(function(data, status, headers, config) 
     { 
      // ... 
0

Есть два Главный совет: 1) использовать некоторую внешнюю угловую библиотеку загрузки файлов, например ng-file-upload 2) подписаться на submit события от контроллера:

document.getElementById('upload_file').addEventListener('submit', your_handler) 
+0

Спасибо! Хорошее предложение re. нг-файлы для загрузки. К сожалению, прослушивание события «submit» не будет делать именно то, что мне нужно - оно срабатывает, когда передний конец отправляет форму, а не когда обратный конец отправляет ответ. –

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

  • Нет связанных вопросов^_^