2016-08-04 31 views
0

У меня есть установка multer в качестве промежуточного слоя по маршруту. Когда этот маршрут попал, multer не загружает файл. Это то, что console.log отчеты:Multer не сохраняет файл как файл

{ firstname: 'foo', 
    lastname: 'foo', 
    username: 'foo10', 
    password: 'test1234', 
    file: '/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAAB..... 

} 

У меня есть следующие настройки для multer:

var storage = multer.diskStorage({ 
    destination: function(req, file, cb) { 
    cb(null, '../images/profile'); 
    }, 
    filename: function(req, file, cb) { 
    cb(null, req.body.username + '.jpeg'); 
    } 
}); 

var upload = multer({storage: storage}); 

router.post('/auth/signup', upload.single('file'), function(req,res) { 
    console.log(req.body); 
}); 

Так что вопрос в том, что вместо того, чтобы сохранить файл как файл он просто рассматривает его как еще один ключ -значная пара в форме.

Для дальнейшего уточнения, я получить это изображение от Cordova API: http://ionicframework.com/docs/v2/native/camera/

import { Camera } from 'ionic-native'; 

Camera.getPicture(options).then((imageData) => { 
// imageData is either a base64 encoded string or a file URI 
// If it's base64: 
    let base64Image = 'data:image/jpeg;base64,' + imageData; 

    let formData: FormData = new FormData(), 
     xhr: XMLHttpRequest = new XMLHttpRequest();  
     formData.append("file", base64Image); 

     xhr.onreadystatechange =() => { 
      if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
       observer.next(JSON.parse(xhr.response)); 
       observer.complete(); 
      } else { 
       observer.error(xhr.response); 
      } 
      } 
     }; 
     xhr.open('POST', 'http://localhost:8080/auth/signup', true); 
     xhr.send(formData); 

}, (err) => { 
// Handle error 
}); 
+0

Я не понимаю? Вы пытаетесь сохранить файл, и он работает неправильно? что происходит? –

+0

уточнение добавлено – runtimeZero

+0

Это выглядит как JPEG с кодировкой Base64. Вы уверены, что ваш клиентский код правильно загружает данные формы? – robertklep

ответ

0

Данные файл загружается в виде строки Base64, который наводит на мысль, что это не загружается в соответствующее поле File формы данных , Вот почему multer рассматривает его как обычное поле и не пытается сохранить его в файле.

В файле this answer представлен код клиентской стороны для обработки строк данных URI (например, base64Image) в нужном формате для загрузки на сервер.