2015-02-03 3 views
0

Я отправляю строку 1.5MB через запрос POST на мой экспресс-сервер, но когда я просматриваю полученные данные, это всего лишь 786 КБ. Строка, которую я отправляю, представляет собой строку изображения base64. Я также попытался изменить пределы multer безрезультатно.Почтовые данные, полученные сервером Express с промежуточным программным обеспечением multer, усекаются

КЛИЕНТ:

function upload(file) { 
var form = new FormData(), 
    xhr = new XMLHttpRequest(); 
form.append('filename', "imageName.jpg"); 
form.append('imageData', file); 
xhr.open('post', 'http://server/imgdata', true); 
xhr.send(form); 
} 

SERVER:

app.use(multer({ 
dest: './uploads/', 
// WILL RENAME THE RECEIVED FILE 
rename: function(fieldname, filename) { 
    return filename + Date.now(); 
}, 
// UPLOAD HAS STARTED 
onFileUploadStart: function(file) { 
    console.log(file.originalname + ' is starting ...') 
}, 
// FILE HAS BEEN RECEIVED AND SAVED 
onFileUploadComplete: function(file) { 
    console.log(file.fieldname + ' uploaded to ' + file.path) 
    done = true; 
}, 
onFieldsLimit: function() { 
    console.log('Crossed fields limit!') 
} 
})); 
app.post('/imgdata', function(req, res) { 

// THIS IS RETURNS ONLY A PART OF THE DATA 
res.json(req.body.image2); 

var data = req.body.image2.replace(/^data:image\/\w+;base64,/, ""); 
var buf = new Buffer(data, 'base64'); 

// THE IMAGE IS SAVED BUT ONLY THE 786KB OF IT EVERY TIME REGARDLESS  
// OF THE SIZE OF DATA SEND 
fs.writeFile('image.jpg', buf, function(err) { 
    if (err) throw err; 
    console.log('It\'s saved!'); 
}); 
}) 
+0

Почему не просто отправить файл, 'formData' поддерживает файлы изображений напрямую – adeneo

+0

@adeneo это просто доказательство того, что приложение будет делать, это отправка данных с объекта холста. – Manolis

+0

. Multer использует busboy внутри, и смотрит на документация для этого, кажется, размер по умолчанию для текстового поля равен 1 Мб, и по мере того, как вы отправляете это как base64, это просто текст, и вы, вероятно, нажимаете ограничение max fieldSize. – adeneo

ответ

0

Изменение пределов multer промежуточного слоя не решить проблему,

limits: { 
    fieldNameSize : 100000, 
    fieldSize : 5242880 
}, 

, но в соответствии с @ adeneo's suggestio п я дал bodyParser в другой идти и после изменения лимита urlencoded как так

app.use(bodyParser.urlencoded({ 
extended: true, 
limit: 100000000 
})); 

Я получил все данные на сервере и успешно сохранил изображение.

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

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