anacronw/multer-s3

XMLParserError: Non-whitespace before first tag

frames75 opened this issue · 1 comments

Using this code, the file is uploaded on my local FS correctly:

//Storage in local disk.
const storage = multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, './public/');
    },
    filename: function (req, file, callback) {
        callback(null, file.fieldname + path.extname(file.originalname));
    }
});

const upload = multer({ 
        storage: storage,
        fileFilter: fileFilter,
        limits: { fileSize: Number(process.env.LOGO_FILE_SIZE) 
}})
.single('inputFile');

When I use this code to upload to my S3 bucket:

const s3 = new AWS.S3({
	apiVersion: '2006-03-01',
	accessKeyId: process.env.AWS_ACCESS_KEY_ID,
	secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
	region: process.env.AWS_DEFAULT_REGION
});

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: process.env.AWS_S3_BUCKET,
    contentType: multerS3.AUTO_CONTENT_TYPE,
    acl: 'public-read',
    metadata: (req, file, callback) => {
      callback(null, { fieldName: file.fieldname })
    },
    key: (req, file, callback) => {
        callback(null, file.fieldname + path.extname(file.originalname));
    }
  })
})
.single('inputFile');

app.use('/api/user_profile/change_logo', (req, res) => {
    upload(req, res, (err) => {
        if(err) {
            return res.status(500).send(err ? err : "Error uploading file.");
        }
        res.send(req.file.location);
    });
});

I get this error:

{ XMLParserError: Non-whitespace before first tag.
Line: 0
Column: 1
Char: {
    at error (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/sax/lib/sax.js:651:10)
    at strictFail (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/sax/lib/sax.js:677:7)
    at beginWhiteSpace (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/sax/lib/sax.js:951:7)
    at SAXParser.write (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/sax/lib/sax.js:1006:11)
    at Parser.exports.Parser.Parser.parseString (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/xml2js/lib/parser.js:322:31)
    at Parser.parseString (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/xml2js/lib/parser.js:5:59)
    at NodeXmlParser.parse (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/xml/node_parser.js:31:10)
    at Request.extractError (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/services/s3.js:823:39)
    at Request.callListeners (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/request.js:688:14)
    at Request.transition (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/home/carpanta/Documentos/Cosas/Curro/nodejs/proyectos-personales/prestamos-logger/node_modules/aws-sdk/lib/request.js:690:12)
  message:
   'Non-whitespace before first tag.\nLine: 0\nColumn: 1\nChar: {',
  code: 'XMLParserError',
  retryable: true,
  time: 2020-08-23T09:24:31.306Z,
  statusCode: 500 }

I'm sure my bucket credentials are right because I tested it in other simplier example.

The node.js app that throws this error is a complete one with cookies, passport session, helmet,... I don't know if some of this middleware is changing the request stream with the file. I doubt it because when I use the first code with local FS storage it works rightly.

If someone could help me with some suggestion I would really appreciate it.

It seems like this is an issue in the AWS-SDK or with your setup, could you try updating to the latest aws-sdk?

Closing since this is so old...