MalformedXML:您提供的XML格式不正确,或者没有针对我们发布的模式进行validation
在使用AWS S3时,我遇到了这个奇怪的问题。 我正在处理可以将图像存储到AWS存储桶的应用程序。 使用Multer作为中间件和S3FS库来连接并上传到AWS。
但是当我尝试上传内容时popup下面的错误。
“MalformedXML:你提供的XML格式不正确,或者没有对我们的publis hed schema进行validation”
Index.js
var express = require('express'); var router = express(); var multer = require('multer'); var fs = require('fs'); var S3FS = require('s3fs'); var upload = multer({ dest: 'uploads' }) var S3fsImpl = new S3FS('bucket-name', { region: 'us-east-1', accessKeyId: 'XXXXXXXXXXXX', secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' }); /* GET home page. */ router.get('/', function (req, res, next) { res.render('profile', { title: 'Express' }); }); router.post('/testupload', upload.single('file'), function (req, res) { var file = req.file; console.log(file); var path = req.file.path; var stream = fs.createReadStream(path); console.log(stream); S3fsImpl.writeFile(file.name, stream).then(function () { fs.unlink(file.path, function (err) { if (err) { console.log(err); } }); res.redirect('/profile'); }) }); module.exports = router;
编辑 输出:
{ fieldname: 'file', originalname: '441_1.docx', encoding: '7bit', mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', destination: 'uploads', filename: '662dcbe544804e4f50dfef1f52b40d22', path: 'uploads\\662dcbe544804e4f50dfef1f52b40d22', size: 13938 } ReadStream { _readableState: ReadableState { objectMode: false, highWaterMark: 65536, buffer: BufferList { head: null, tail: null, length: 0 }, length: 0, pipes: null, pipesCount: 0, flowing: null, ended: false, endEmitted: false, reading: false, sync: true, needReadable: false, emittedReadable: false, readableListening: false, resumeScheduled: false, defaultEncoding: 'utf8', ranOut: false, awaitDrain: 0, readingMore: false, decoder: null, encoding: null }, readable: true, domain: null, _events: { end: [Function] }, _eventsCount: 1, _maxListeners: undefined, path: 'uploads\\662dcbe544804e4f50dfef1f52b40d22', fd: null, flags: 'r', mode: 438, start: undefined, end: undefined, autoClose: true, pos: undefined, bytesRead: 0 }
的package.json
{ "name": "aws-s3-images", "version": "1.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.17.1", "connect-multiparty": "^2.0.0", "cookie-parser": "~1.4.3", "debug": "~2.6.3", "express": "~4.15.2", "hbs": "~4.0.1", "morgan": "~1.8.1", "multer": "^1.3.0", "s3fs": "^2.5.0", "serve-favicon": "~2.4.2" }, "description": "AWS S3 uploading images", "main": "app.js", "devDependencies": {}, "keywords": [ "javascript" ], "author": "reeversedev", "license": "MIT" }
这个代码应该适合你。 你需要记住:1)使用独特的桶名称2)在你的文件对象下使用'originalname'而不是'name'< – 这个属性不存在
app.post('/testupload', function(req, res){ var file = req.files[0]; console.log(file.path); console.log(file.name); console.log('FIRST TEST: ' + JSON.stringify(file)); var stream = fs.createReadStream(file.path); S3fsImpl.writeFile(file.originalname, stream).then(function () { console.log('File has been sent - OK'); }, function(reason) { throw reason; } ); res.redirect('/index'); });
你可以试试这个代码:
var S3fsImpl = new S3FS('bucket-name', { region: 'us-east-1', accessKeyId: 'XXXXXXXXXXXX', secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' }); var fsImplStyles = S3fsImpl.getPath(file.name); // Change us-east-1 for your region var url = 'https://s3-us-east-1.amazonaws.com/' + fsImplStyles;
发送反馈,如果这个代码适合你。
- 如何在multer-S3中为AWS-S3存储桶指定上传目录?
- 错误:使用AWS Lambda上的gm降低图片质量时,stream会产生空缓冲区
- 如何在客户端将可查看file upload到Amazon S3?
- 如何通过webapp上传一个一兆字节的文件到Amazon S3?
- 将文件从公共S3存储桶复制到专用S3存储桶的最佳方法
- 用Node / Knox上传到S3:socket挂断
- 节点js s3fs图像上传到aws amazon s3服务器并设置ContentType
- NodeJS:通过Knox上传纯文本到S3,我得到statusCode = 505?
- Amazon S3:与服务器的套接字连接在超时期限内未读取或写入