2015-10-31 4 views
1

У меня есть следующий маршрут на сервере hapijs. И я пытаюсь создать новый файл с помощью ajax.Как найти полезную нагрузку в hapi

{ 
     method: 'POST', 
     path: '/create', 
     config : { 
      payload:{ 
       maxBytes: 10*1024*1024, 
       output:'stream', 
       parse: true, 
       allow: 'multipart/form-data' 
      }, 
      handler: function (request, reply) { 
       var data = request.payload; 
       if (data.file) { // undefined always 
        var name = data.file.hapi.filename; 
        var path = writePath + '/' + name; 
        var file = fs.createWriteStream(path); 

        file.on('error', reply); 

        data.file.pipe(file); 

        data.file.on('end', function (err) { 
         reply({ 
          filename: data.file.hapi.filename, 
          headers: data.file.hapi.headers 
         }); 
        }); 
       } else reply(boom.badRequest('No file found. Please try again.')); 
      } 
} 

Приведенный выше код всегда дает data.file как неопределенный. Что-нибудь мне не хватает?

В хапи документации http://hapijs.com/api#requests, если выход stream

'поток' - входящий полезной нагрузки доступны через Stream.Readable интерфейс. Если полезная нагрузка представляет собой «multipart/form-data» и , синтаксический анализ равен true, значения полей представляются в виде текста, а файлы - , предоставляемые в виде потоков. Файловые потоки из загрузки «multipart/form-data» также будут иметь свойство hapi, содержащее имя файла и заголовки .

HTML код:

<form enctype="multipart/form-data" action="/create" method="post"> 
    <input type="file" id="UniqueFileImporter"/> 
    <input type="submit"/> 
</form> 

конечно нет кода JS, так как я просто нужно отправить форму после выбора файла из системы

+1

Конечно, вы отправляете форму с полем ввода файла с именем 'file'? Код выше выглядит правильно, поэтому нам нужно будет увидеть код для формы HTML и/или код AJAX –

+0

@MattHarrison эй я добавил html, пожалуйста, посмотрите, помогает ли он – user3585284

ответ

0

благодаря Мэтт Харрисон за указание ошибки , я отсутствовал имя атрибута в файле ввода.

HTML должен быть

<form enctype="multipart/form-data" action="/create" method="post"> 
    <input type="file" name="file" id="UniqueFileImporter"/> 
    <input type="submit"/> 
</form> 
Смежные вопросы