2015-07-31 5 views
2

Итак, около месяца назад я спросил a question относительно суперагента и отправки файлов, но не получил ответа вообще. Я все равно хотел бы узнать, как это сделать, поскольку мне нравится использовать суперагент.Как отправить файлы с суперагентом

Я могу отправить файлы с помощью простой Ajax:

var fd = new FormData(); 
     fd.append('file', this.refs.File.getDOMNode().files[0]); 

     $.ajax({ 
      url: 'http://localhost:8080/files', 
      data: fd, 
      processData: false, 
      contentType: false, 
      type: 'POST', 
      success: function(data){ 
       console.log(data) 
      } 
     }); 

Но когда я пытаюсь то же самое в SuperAgent, ничего не работает:

var fd = new FormData(); 
fd.append('file', this.refs.File.getDOMNode().files[0]); 

Request.post('http://localhost:8080/files') 
    .set('Content-Type', false) 
    .set('Process-Data', false) 
    .attach('file', fd, 'file') 
    .end((err, res) => { 
     console.log(err); 
     console.log(res); 
    }) 

Может кто-нибудь, пожалуйста, скажите мне, что происходит на.

ответ

3

Это должно сработать.

var file = this.refs.File.getDOMNode().files[0]; 


Request.post('http://localhost:8080/files') 
    .set("Content-Type", "application/octet-stream") 
    .send(file) 
    .end((err, res) => { 
     console.log(err); 
     console.log(res); 
    }) 
+0

Можете ли вы сказать мне, почему "пристроить" не работает? – Littlee

+0

'attach' можно использовать только на сервере. Вам нужно указать путь к файлу в качестве второго параметра, и браузер не сможет получить доступ к файловой системе. –

+2

@CodrinIftimie, ваш комментарий ошибочно. «Прикрепить» отлично работает на передней стороне. Я только что использовал «attach» для загрузки файлов здесь в одном из моих проектов. Теоретическая реализация очень хорошо объясняется здесь: http://abandon.ie/notebook/simple-file-uploads-using-jquery-ajax. – bstst

6

Приложение должно работать.
Пример использования экспресс/multer:

клиент:

superagent.post('http://localhost:3700/upload').attach('theFile',file); 

сервер:

const storage = multer.memoryStorage(); 
const upload = multer({ storage: storage }); 
router.post("/upload", upload.single('theFile'), (req, res) => { 
    debug(req.file.buffer); 
    res.status(200).send(true); 
    res.end(); 
}); 
+0

Это работает как шарм, а multer помогает на стороне сервера. –

+0

Для меня это хорошо работает. На сервере я использовал async-busboy для анализа многообразных данных. – vijayst

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

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