Tag: multipart

Nodejs多部分file upload,生成大于原始文件

我想用Express 4编写一个Nodejs服务器的file upload器。我不想使用任何中间件来达到这个目的,因为这更像是一个理论练习,以更好地理解Nodejs如何工作和分段上传。 以下是Express 4中路由的主要代码,它收集客户端数据并将其写出。 var clientData = []; // When Data Arrives req.on('data', function(data){ clientData.push(data); }); // Done req.on('end', function(){ var output = Buffer.concat(clientData); fs.writeFile('Thisisthesong.mp3', output, 'binary', function(err){ if (err) throw err; debug('Wrote out song'); }); }); 我的问题是,当文件最后写出来,比原来的大。 例如,如果我要上传一个原来为10.5 MB的代码的MP3,结果是11 MB。 我相信这与将编码从身体来回切换写出来有关。 我也明白,节点并没有真正的二进制编码,这可能是一个问题? 我也认为这可能是因为我没有剥离数据的边界或内容configuration(这将是下一步,一旦运行良好),但边界和configuration只有大约300字节而不是500KB 。 有没有人有解释或可以指出我做错了什么,我将不胜感激。 其他信息: +快递4 +除了cookieparser,我现在还没有使用任何中间件 + Ubuntu 12.04 +节点v0.10.31

Node.js – Multipart:XMLHttpRequest获取AJAX POST的进度

我必须更新客户端上传的文件的大小,类似于youtube的做法:上传一个文件,直到100%上传为止,您将获得上传到目前为止已上传文件的更新。 我知道你可以通过多部分req.files.myFile.size获得想要上传的文件的大小,并且会给你文件的全部大小。 但有没有办法获得磁盘上的文件的当前大小? 谢谢你!

multiparty for nodejs不parsing任何上传的文件

我试图在后端使用sails.js节点(多方)+angular(angularfile upload)上执行简单的上传文件。 似乎前端正确地向后端发送了一个文件,但似乎后端没有收到任何内容,或者响应无效的请求(不一致)。 form.parse部分回应空字段和文件。 我在这里呆了几个小时,用Googlesearch了解多方的问题,但是我找不到任何有用的信息。 任何意见将不胜感激 请求标题: Accept:application/json, text/plain, */* Accept-Encoding:gzip, deflate Accept-Language:en-US,en;q=0.8 Connection:keep-alive Content-Length:76632 Content-Type:multipart/form-data; boundary=—-WebKitFormBoundary7iH8B208bfkavrKt Cookie:sails.sid=s%3AY9YwxQC90Sq7pc3bp-scW7EH.%2B%2FYHfrTXCUzfPOBpeEt7VFH6Npw3s05Rqyfgu6DHVdg Host:localhost:1337 Origin:http://localhost:1337 Referer:http://localhost:1337/kirill User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 Request Payload ——WebKitFormBoundary7iH8B208bfkavrKt Content-Disposition: form-data; name="file"; filename="10923270_813578785376550_5210357694589684637_n.jpg" Content-Type: image/jpeg ——WebKitFormBoundary7iH8B208bfkavrKt– 后端(具有多方的节点): upload: function(req, res) { var multiparty = require('multiparty'); var fs […]

req.form不是一个实例化的多方表单对象

我正在使用具有多部分中间件的快速节点框架。 设置multipart defer: true选项让我可以访问req.form中的req.form ,但它似乎不是一个有效的多方Form对象实例。 这只是一个普通的旧JS对象。 问题在于我无法使用表单对象上的多方文档中列出的function。 听事件,parsing表单等是行不通的。 我使用这个build议,而不是折旧bodyParser()与快递: app.use(express.urlencoded()); app.use(express.json()); app.use(express.multipart({ limit: '900mb', defer: true })); 在我的路线中: app.post('/api/videos/upload', isLoggedIn, function(req, res) { var form = req.form; form.on('progress', function(bytesReceived, bytesExpected) { console.log(bytesReceived + ' / ' + bytesExpected); }); 我在日志中没有得到任何进展。 我看到的所有例子都假设这个表单对象是真正的交易,而不仅仅是一个数据对象。 他们有什么不同? 我错过了什么? 我看到了一些解决scheme,build议直接编写我自己的使用多方的中间件。 我考虑过这个,但是我在不需要这个控制级别的不同路由中使用多部分中间件来处理其他表单。 是否可以使用多部分,并写我自己的中间件只是为了上传? 如果我要去兔子洞,我会解释我的最终目标。 我想在上传开始之前检查预期的字节,所以我可以立即将它踢回到前端。 在找出文件太大之前,没有理由让用户等待900MB上传。 如果任何人有任何的洞察力如何实现这一点,请分享。

多部分file upload问题

我有一个Koa应用程序,它有一个突然停止工作的multipart/form-datafile upload。 我花了8个多小时试图找出问题。 我试过/validation过的: 不是节点6的问题; 节点4(之前的工作)也出现同样的问题。 在packages.json排除了版本问题; 已经对所有相关软件包和最新版本的原始版本进行了testing。 在最新的Chrome和最新的Firefox中发布展品。 问题不会展示,直接从邮递员发送与浏览器发送完全相同的标题 (除了Cookie和Referer ,两者都不能在Postman中设置)。 与Koa包装koa更好的身体和koa垂体问题展品。 直接使用公务员 , 强大 ,甚至是多党的问题展品。 类似于人们在这个垂涎问题上的问题 。 尝试了所有build议(包括在文件参数之前添加字段参数的远景)无济于事。 试图重新创build最小的testing用例,但一直无法。 已经尝试逐行削减我的应用程序,检查巴贝尔输出对最小的testing用例,直到他们在function上相同,问题仍然存在于我的应用程序,但不是在testing的情况下。 所有testing运行在同一台服务器上,使用相同的浏览器。 在debugging的时候,这个问题的最清晰的视angular是在incoming_form.js强大的。 发生单个data事件: 然后一个abort事件: 之后,浏览器最终超时。 (该文件大于在第一个data事件中收到的15个字节。) 我曾经希望通过从formidabl转到busboy来快速解决问题,现在我是一个真正的约束者,因为这个问题需要得到解决,而我正在想办法解决这个问题。 我试图用我能想到的所有方式进行分割,按照我能想到的方式进行debugging,并且没有编写自己的多分析器(不是我会津津乐道的任务),我很快就没有办法了。 有没有人跑过这个? 你有什么想法如何进行debugging或产生一个最小的testing案例?

Node JS / Express:如何parsing外部API调用的多部分响应

我使用npm Request模块进行外部API调用,该模块返回多部分表单数据。 以下是请求的代码段(不完整): request.get(options, function (err, httpResponse, body) { if (err) { return console.error('Error:', err); } console.log(body); }); 以下是响应主体(上面logging的控制台)的示例: –multipartBoundary Content-Disposition: form-data; name="file"; filename="loremipsum.sample" Content-Type: application/octet-stream Content-Transfer-Encoding: base64 TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQgb2YgdGhlIHByaW50aW5nIGFuZCB0eXBlc2V0dGluZyBpbmR1c3RyeS4gTG9yZW0gSXBzdW0gaGFzIGJlZW4gdGhlIGluZHVzdHJ5J3Mgc3RhbmRhcmQgZHVtbXkgdGV4dCBldmVyIHNpbmNlIHRoZSAxNTAwcywgd2hlbiBhbiB1bmtub3duIHByaW50ZXIgdG9vayBhIGdhbGxleSBvZiB0eXBlIGFuZCBzY3JhbWJsZWQgaXQgdG8gbWFrZSBhIHR5cGUgc3BlY2ltZW4gYm9vay4gSXQgaGFzIHN1cnZpdmVkIG5vdCBvbmx5IGZpdmUgY2VudHVyaWVzLCBidXQgYWxzbyB0aGUgbGVhcCBpbnRvIGVsZWN0cm9uaWMgdHlwZXNldHRpbmcsIHJlbWFpbmluZyBlc3NlbnRpYWxseSB1bmNoYW5nZWQuIEl0IHc= –multipartBoundary Content-Disposition: form-data; name="json_detail" Content-Type: application/json;charset=utf-8 { "filename":"1478162481102.sdoc", "date_modified":"1478170365000", } –multipartBoundary– 我的问题是: 这个响应是以stream/文本表示的MultipartForm数据是正确的吗? 我怎样才能parsing响应的方式,它返回文件对象(在这种情况下是两个文件)? 我相信我不能使用中间件,因为这是一个外部的API调用。 我尝试了以下内容: pipe道到文件(这只是pipe道响应到一个文件) Http.get和busboy 我最后的select似乎是使用正则expression式parsing响应并写入文件。 这似乎是缓慢的 任何input将不胜感激! 谢谢!

fs.createWriteStream错误:ENOENT

我使用connect-busboy来处理file upload,这里是代码 req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { var type = mimetype.split('/')[1] var newName = (new Date()).valueOf(); var saveTo = path.join(__dirname, '../../userUpload',req.user._id+'', newName+'.'+type); file.pipe(fs.createWriteStream(saveTo,{flags: 'w'})); }); 正如你所看到的,我试图将上传的文件保存在一个dynamic目录(以user._id命名)和一个新的文件名; 但它给了我一个错误说 "Error: ENOENT, open '\userUpload\53a65fde4e22939811aa306d\1404636837084.mp4' " 但是当我manully创builduser._id目录首先,它将工作,所以fs.createWriteStream不能处理dynamic目录对吗? 我怎样才能做到这一点?

MIME电子邮件多部分分析器

我正在寻找一个node.js模块,可以parsing我的IMAP请求 – FETCH 1 BODY [TEXT]。 我需要多部分分析器,因为我有层次结构中级别很less的消息。 消息示例: –94eb2c032ec81bf420053483f579 Content-Type: multipart/alternative; boundary=94eb2c032ec81bf411053483f577 –94eb2c032ec81bf411053483f577 Content-Type: text/plain; charset=UTF-8 test –94eb2c032ec81bf411053483f577 Content-Type: text/html; charset=UTF-8 <div dir="ltr">test</div> –94eb2c032ec81bf411053483f577– –94eb2c032ec81bf420053483f579 Content-Type: image/x-icon; name="favicon.ico" Content-Disposition: attachment; filename="favicon.ico" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ip2cdokt0 AAABAAEAEA8AAAEAIA… THIS IS ATTACHMENT …A8AcAAPw/AAA= –94eb2c032ec81bf420053483f579–)

不能在callback中监听/处理EventEmitter

使用Mongoose来处理MongoDB,但是当试图处理在查询callback中发出的事件(即,parsing使用Formidable的分段上传)时,没有运气。 任何想法,为什么,或解决? 楷模 var mongoose = require('mongoose'); function User() { return mongoose.model('users', new mongoose.Schema({ username: String, email: String, name: String })); } exports = module.exports = User; 服务器 /** Example HTTP server */ var http = require('http'), mongoose = require('mongoose'), formidable = require('formidable'), models = require('./models'); mongoose.connect('mongodb://localhost/test'); var User = new models.User(); var form = […]

使用Connect Multiparty处理节点js中的请求

Error: Request aborted at IncomingMessage.onReqAborted (D:\ProjectName\node_modules\express\node_modules\connect\node_modules\multiparty\index.js:131:17) at IncomingMessage.EventEmitter.emit (events.js:92:17) at abortIncoming (http.js:1911:11) at Socket.serverSocketCloseListener (http.js:1923:5) at Socket.EventEmitter.emit (events.js:117:20) at TCP.close (net.js:466:12) 使用连接多方中间件在节点js中上传多个文件时出现此错误。 我甚至没有上传大文件。 其不超过50MB。 当上传文件时断开networking连接时出现此错误。 有没有办法来处理这个错误。