node.js - 图片上传,node做的数据接收,找不到文件对象

【字号: 日期:2022-09-25浏览:24作者:雯心

问题描述

收到数据,找不到文件对象,请问文件对象的接收是否成功?以下是req对象的内容

IncomingMessage { _readableState: ReadableState { objectMode: false, highWaterMark: 16384, buffer: [], 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: {}, _eventsCount: 0, _maxListeners: undefined, socket: Socket { connecting: false, _hadError: false, _handle: TCP {bytesRead: 657,_externalStream: {},fd: -1,reading: true,owner: [Circular],onread: [Function: onread],onconnection: null,writeQueueSize: 0 }, _parent: null, _host: null, _readableState: ReadableState {objectMode: false,highWaterMark: 16384,buffer: [],length: 0,pipes: null,pipesCount: 0,flowing: true,ended: false,endEmitted: false,reading: true,sync: false,needReadable: true,emittedReadable: false,readableListening: false,resumeScheduled: false,defaultEncoding: ’utf8’,ranOut: false,awaitDrain: 0,readingMore: false,decoder: null,encoding: null }, readable: true, domain: null, _events: { end: [Object],finish: [Function: onSocketFinish],_socketEnd: [Function: onSocketEnd],drain: [Object],timeout: [Function],error: [Object],close: [Object],data: [Function: socketOnData],resume: [Function: onSocketResume],pause: [Function: onSocketPause] }, _eventsCount: 10, _maxListeners: undefined, _writableState: WritableState {objectMode: false,highWaterMark: 16384,needDrain: false,ending: false,ended: false,finished: false,decodeStrings: false,defaultEncoding: ’utf8’,length: 0,writing: false,corked: 0,sync: true,bufferProcessing: false,onwrite: [Function],writecb: null,writelen: 0,bufferedRequest: null,lastBufferedRequest: null,pendingcb: 0,prefinished: false,errorEmitted: false,bufferedRequestCount: 0,corkedRequestsFree: [Object] }, writable: true, allowHalfOpen: true, destroyed: false, _bytesDispatched: 0, _sockname: null, _pendingData: null, _pendingEncoding: ’’, server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _idleTimeout: 120000, _idleNext: Socket {connecting: false,_hadError: false,_handle: [Object],_parent: null,_host: null,_readableState: [Object],readable: true,domain: null,_events: [Object],_eventsCount: 10,_maxListeners: undefined,_writableState: [Object],writable: true,allowHalfOpen: true,destroyed: false,_bytesDispatched: 970,_sockname: null,_pendingData: null,_pendingEncoding: ’’,server: [Object],_server: [Object],_idleTimeout: 120000,_idleNext: [Object],_idlePrev: [Circular],_idleStart: 1410,parser: [Object],on: [Function: socketOnWrap],_paused: false,read: [Function],_consuming: true,_httpMessage: null,_peername: [Object] }, _idlePrev: TimersList {_idleNext: [Circular],_idlePrev: [Object],_timer: [Object],_unrefed: true,msecs: 120000 }, _idleStart: 39414, parser: HTTPParser {’0’: [Function: parserOnHeaders],’1’: [Function: parserOnHeadersComplete],’2’: [Function: parserOnBody],’3’: [Function: parserOnMessageComplete],’4’: [Function: onParserExecute],_headers: [],_url: ’’,_consumed: true,socket: [Circular],incoming: [Circular],outgoing: null,maxHeaderPairs: 2000,onIncoming: [Function: parserOnIncoming] }, on: [Function: socketOnWrap], _paused: false, read: [Function], _consuming: true, _httpMessage: ServerResponse {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,output: [],outputEncodings: [],outputCallbacks: [],outputSize: 0,writable: true,_last: false,chunkedEncoding: false,shouldKeepAlive: true,useChunkedEncodingByDefault: true,sendDate: true,_removedHeader: {},_contentLength: null,_hasBody: true,_trailer: ’’,finished: false,_headerSent: false,socket: [Circular],connection: [Circular],_header: null,_headers: [Object],_headerNames: [Object],_onPendingData: [Function: updateOutgoingData],req: [Circular],locals: {},__onFinished: [Object] }, _peername: { address: ’::1’, family: ’IPv6’, port: 35968 } }, connection: Socket { connecting: false, _hadError: false, _handle: TCP {bytesRead: 657,_externalStream: {},fd: -1,reading: true,owner: [Circular],onread: [Function: onread],onconnection: null,writeQueueSize: 0 }, _parent: null, _host: null, _readableState: ReadableState {objectMode: false,highWaterMark: 16384,buffer: [],length: 0,pipes: null,pipesCount: 0,flowing: true,ended: false,endEmitted: false,reading: true,sync: false,needReadable: true,emittedReadable: false,readableListening: false,resumeScheduled: false,defaultEncoding: ’utf8’,ranOut: false,awaitDrain: 0,readingMore: false,decoder: null,encoding: null }, readable: true, domain: null, _events: { end: [Object],finish: [Function: onSocketFinish],_socketEnd: [Function: onSocketEnd],drain: [Object],timeout: [Function],error: [Object],close: [Object],data: [Function: socketOnData],resume: [Function: onSocketResume],pause: [Function: onSocketPause] }, _eventsCount: 10, _maxListeners: undefined, _writableState: WritableState {objectMode: false,highWaterMark: 16384,needDrain: false,ending: false,ended: false,finished: false,decodeStrings: false,defaultEncoding: ’utf8’,length: 0,writing: false,corked: 0,sync: true,bufferProcessing: false,onwrite: [Function],writecb: null,writelen: 0,bufferedRequest: null,lastBufferedRequest: null,pendingcb: 0,prefinished: false,errorEmitted: false,bufferedRequestCount: 0,corkedRequestsFree: [Object] }, writable: true, allowHalfOpen: true, destroyed: false, _bytesDispatched: 0, _sockname: null, _pendingData: null, _pendingEncoding: ’’, server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _idleTimeout: 120000, _idleNext: Socket {connecting: false,_hadError: false,_handle: [Object],_parent: null,_host: null,_readableState: [Object],readable: true,domain: null,_events: [Object],_eventsCount: 10,_maxListeners: undefined,_writableState: [Object],writable: true,allowHalfOpen: true,destroyed: false,_bytesDispatched: 970,_sockname: null,_pendingData: null,_pendingEncoding: ’’,server: [Object],_server: [Object],_idleTimeout: 120000,_idleNext: [Object],_idlePrev: [Circular],_idleStart: 1410,parser: [Object],on: [Function: socketOnWrap],_paused: false,read: [Function],_consuming: true,_httpMessage: null,_peername: [Object] }, _idlePrev: TimersList {_idleNext: [Circular],_idlePrev: [Object],_timer: [Object],_unrefed: true,msecs: 120000 }, _idleStart: 39414, parser: HTTPParser {’0’: [Function: parserOnHeaders],’1’: [Function: parserOnHeadersComplete],’2’: [Function: parserOnBody],’3’: [Function: parserOnMessageComplete],’4’: [Function: onParserExecute],_headers: [],_url: ’’,_consumed: true,socket: [Circular],incoming: [Circular],outgoing: null,maxHeaderPairs: 2000,onIncoming: [Function: parserOnIncoming] }, on: [Function: socketOnWrap], _paused: false, read: [Function], _consuming: true, _httpMessage: ServerResponse {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,output: [],outputEncodings: [],outputCallbacks: [],outputSize: 0,writable: true,_last: false,chunkedEncoding: false,shouldKeepAlive: true,useChunkedEncodingByDefault: true,sendDate: true,_removedHeader: {},_contentLength: null,_hasBody: true,_trailer: ’’,finished: false,_headerSent: false,socket: [Circular],connection: [Circular],_header: null,_headers: [Object],_headerNames: [Object],_onPendingData: [Function: updateOutgoingData],req: [Circular],locals: {},__onFinished: [Object] }, _peername: { address: ’::1’, family: ’IPv6’, port: 35968 } }, httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: ’1.1’, complete: false, headers: { host: ’localhost:7165’, connection: ’keep-alive’, ’content-length’: ’5965’, origin: ’http://localhost:7165’, ’user-agent’: ’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.4 Safari/537.36’, ’content-type’: ’multipart/form-data; boundary=----WebKitFormBoundaryh3vMr8xU6xcwgZM7’, accept: ’application/json’, ’cache-control’: ’no-cache’, ’x-devtools-emulate-network-conditions-client-id’: ’D0E6CC95-CE83-43E9-A023-5B4499CC6416’, ’x-requested-with’: ’XMLHttpRequest’, referer: ’http://localhost:7165/’, ’accept-encoding’: ’gzip, deflate’, ’accept-language’: ’zh-CN,zh;q=0.8’, cookie: ’io=A78ouAVNfsNcebomAAAA’, dnt: ’1’ }, rawHeaders: [ ’Host’, ’localhost:7165’, ’Connection’, ’keep-alive’, ’Content-Length’, ’5965’, ’Origin’, ’http://localhost:7165’, ’User-Agent’, ’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.4 Safari/537.36’, ’Content-Type’, ’multipart/form-data; boundary=----WebKitFormBoundaryh3vMr8xU6xcwgZM7’, ’Accept’, ’application/json’, ’Cache-Control’, ’no-cache’, ’X-DevTools-Emulate-Network-Conditions-Client-Id’, ’D0E6CC95-CE83-43E9-A023-5B4499CC6416’, ’X-Requested-With’, ’XMLHttpRequest’, ’Referer’, ’http://localhost:7165/’, ’Accept-Encoding’, ’gzip, deflate’, ’Accept-Language’, ’zh-CN,zh;q=0.8’, ’Cookie’, ’io=A78ouAVNfsNcebomAAAA’, ’DNT’, ’1’ ], trailers: {}, rawTrailers: [], upgrade: false, url: ’/uimg’, method: ’POST’, statusCode: null, statusMessage: null, client: Socket { connecting: false, _hadError: false, _handle: TCP {bytesRead: 657,_externalStream: {},fd: -1,reading: true,owner: [Circular],onread: [Function: onread],onconnection: null,writeQueueSize: 0 }, _parent: null, _host: null, _readableState: ReadableState {objectMode: false,highWaterMark: 16384,buffer: [],length: 0,pipes: null,pipesCount: 0,flowing: true,ended: false,endEmitted: false,reading: true,sync: false,needReadable: true,emittedReadable: false,readableListening: false,resumeScheduled: false,defaultEncoding: ’utf8’,ranOut: false,awaitDrain: 0,readingMore: false,decoder: null,encoding: null }, readable: true, domain: null, _events: { end: [Object],finish: [Function: onSocketFinish],_socketEnd: [Function: onSocketEnd],drain: [Object],timeout: [Function],error: [Object],close: [Object],data: [Function: socketOnData],resume: [Function: onSocketResume],pause: [Function: onSocketPause] }, _eventsCount: 10, _maxListeners: undefined, _writableState: WritableState {objectMode: false,highWaterMark: 16384,needDrain: false,ending: false,ended: false,finished: false,decodeStrings: false,defaultEncoding: ’utf8’,length: 0,writing: false,corked: 0,sync: true,bufferProcessing: false,onwrite: [Function],writecb: null,writelen: 0,bufferedRequest: null,lastBufferedRequest: null,pendingcb: 0,prefinished: false,errorEmitted: false,bufferedRequestCount: 0,corkedRequestsFree: [Object] }, writable: true, allowHalfOpen: true, destroyed: false, _bytesDispatched: 0, _sockname: null, _pendingData: null, _pendingEncoding: ’’, server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _server: Server {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,_connections: 1,_handle: [Object],_usingSlaves: false,_slaves: [],_unref: false,allowHalfOpen: true,pauseOnConnect: false,httpAllowHalfOpen: false,timeout: 120000,_pendingResponseData: 0,_connectionKey: ’6::::7165’ }, _idleTimeout: 120000, _idleNext: Socket {connecting: false,_hadError: false,_handle: [Object],_parent: null,_host: null,_readableState: [Object],readable: true,domain: null,_events: [Object],_eventsCount: 10,_maxListeners: undefined,_writableState: [Object],writable: true,allowHalfOpen: true,destroyed: false,_bytesDispatched: 970,_sockname: null,_pendingData: null,_pendingEncoding: ’’,server: [Object],_server: [Object],_idleTimeout: 120000,_idleNext: [Object],_idlePrev: [Circular],_idleStart: 1410,parser: [Object],on: [Function: socketOnWrap],_paused: false,read: [Function],_consuming: true,_httpMessage: null,_peername: [Object] }, _idlePrev: TimersList {_idleNext: [Circular],_idlePrev: [Object],_timer: [Object],_unrefed: true,msecs: 120000 }, _idleStart: 39414, parser: HTTPParser {’0’: [Function: parserOnHeaders],’1’: [Function: parserOnHeadersComplete],’2’: [Function: parserOnBody],’3’: [Function: parserOnMessageComplete],’4’: [Function: onParserExecute],_headers: [],_url: ’’,_consumed: true,socket: [Circular],incoming: [Circular],outgoing: null,maxHeaderPairs: 2000,onIncoming: [Function: parserOnIncoming] }, on: [Function: socketOnWrap], _paused: false, read: [Function], _consuming: true, _httpMessage: ServerResponse {domain: null,_events: [Object],_eventsCount: 2,_maxListeners: undefined,output: [],outputEncodings: [],outputCallbacks: [],outputSize: 0,writable: true,_last: false,chunkedEncoding: false,shouldKeepAlive: true,useChunkedEncodingByDefault: true,sendDate: true,_removedHeader: {},_contentLength: null,_hasBody: true,_trailer: ’’,finished: false,_headerSent: false,socket: [Circular],connection: [Circular],_header: null,_headers: [Object],_headerNames: [Object],_onPendingData: [Function: updateOutgoingData],req: [Circular],locals: {},__onFinished: [Object] }, _peername: { address: ’::1’, family: ’IPv6’, port: 35968 } }, _consuming: false, _dumped: false, next: [Function: next], baseUrl: ’’, originalUrl: ’/uimg’, _parsedUrl: Url { protocol: null, slashes: null, auth: null, host: null, port: null, hostname: null, hash: null, search: null, query: null, pathname: ’/uimg’, path: ’/uimg’, href: ’/uimg’, _raw: ’/uimg’ }, params: {}, query: {}, res: ServerResponse { domain: null, _events: { finish: [Object], end: [Function: onevent] }, _eventsCount: 2, _maxListeners: undefined, output: [], outputEncodings: [], outputCallbacks: [], outputSize: 0, writable: true, _last: false, chunkedEncoding: false, shouldKeepAlive: true, useChunkedEncodingByDefault: true, sendDate: true, _removedHeader: {}, _contentLength: null, _hasBody: true, _trailer: ’’, finished: false, _headerSent: false, socket: Socket {connecting: false,_hadError: false,_handle: [Object],_parent: null,_host: null,_readableState: [Object],readable: true,domain: null,_events: [Object],_eventsCount: 10,_maxListeners: undefined,_writableState: [Object],writable: true,allowHalfOpen: true,destroyed: false,_bytesDispatched: 0,_sockname: null,_pendingData: null,_pendingEncoding: ’’,server: [Object],_server: [Object],_idleTimeout: 120000,_idleNext: [Object],_idlePrev: [Object],_idleStart: 39414,parser: [Object],on: [Function: socketOnWrap],_paused: false,read: [Function],_consuming: true,_httpMessage: [Circular],_peername: [Object] }, connection: Socket {connecting: false,_hadError: false,_handle: [Object],_parent: null,_host: null,_readableState: [Object],readable: true,domain: null,_events: [Object],_eventsCount: 10,_maxListeners: undefined,_writableState: [Object],writable: true,allowHalfOpen: true,destroyed: false,_bytesDispatched: 0,_sockname: null,_pendingData: null,_pendingEncoding: ’’,server: [Object],_server: [Object],_idleTimeout: 120000,_idleNext: [Object],_idlePrev: [Object],_idleStart: 39414,parser: [Object],on: [Function: socketOnWrap],_paused: false,read: [Function],_consuming: true,_httpMessage: [Circular],_peername: [Object] }, _header: null, _headers: { ’x-powered-by’: ’Express’ }, _headerNames: { ’x-powered-by’: ’X-Powered-By’ }, _onPendingData: [Function: updateOutgoingData], req: [Circular], locals: {}, __onFinished: { [Function: listener] queue: [Object] } }, _startAt: [ 201604, 198825086 ], _startTime: 2016-12-26T01:49:42.018Z, _remoteAddress: ’::1’, body: {}, secret: undefined, cookies: { io: ’A78ouAVNfsNcebomAAAA’ }, signedCookies: {}, route: Route { path: ’/uimg’, stack: [ [Object] ], methods: { post: true } } }POST /uimg 200 84.536 ms - 9

图片上传逻辑

uploadImg.prototype.uploadFiles = function(files) {var self = this;for (var i = 0; i < files.length; i++) { var file = files[i]; console.log(file); totalSteps = Math.round(Math.min(maxSteps, Math.max(minSteps, file.size / bytesPerStep))); for (var step = 0; step < totalSteps; step++) {var duration = timeBetweenSteps * (step + 1);setTimeout(function(file, totalSteps, step) { return function() {file.upload = { progress: 100 * (step + 1) / totalSteps, total: file.size, bytesSent: (step + 1) * file.size / totalSteps};self.emit(’uploadprogress’, file, file.upload.progress, file.upload.bytesSent);if (file.upload.progress == 100) { file.status = Dropzone.SUCCESS; self.emit('success', file, ’success’, null); self.emit('complete', file); self.processQueue();} };}(file, totalSteps, step), duration); }} }

理论上应该能收到下面这样一个对象的,现在看上去应该是没有

{ displayImage: { size: 11885, path: ’/tmp/1574bb60b4f7e0211fd9ab48f932f3ab’, name: ’avatar.png’, type: ’image/png’, lastModifiedDate: Sun, 05 Feb 2016 05:31:09 GMT, _writeStream: { path: ’/tmp/1574bb60b4f7e0211fd9ab48f932f3ab’, fd: 14, writable: false, flags: ’w’, encoding: ’binary’, mode: 438, bytesWritten: 11885, busy: false, _queue: [], drainable: true }, length: [Getter], filename: [Getter], mime: [Getter] }}

问题解答

回答1:

至少,应该贴一下你的node的代码啊。。。

我觉得你可能需要 formidable 这个库https://github.com/felixge/no...

var formidable = require(’formidable’), http = require(’http’), util = require(’util’);http.createServer(function(req, res) { if (req.url == ’/upload’ && req.method.toLowerCase() == ’post’) { // parse a file upload var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { res.writeHead(200, {’content-type’: ’text/plain’}); res.write(’received upload:nn’); res.end(util.inspect({fields: fields, files: files})); }); return; } // show a file upload form res.writeHead(200, {’content-type’: ’text/html’}); res.end( ’<form action='/upload' enctype='multipart/form-data' method='post'>’+ ’<input type='text' name='title'><br>’+ ’<input type='file' name='upload' multiple='multiple'><br>’+ ’<input type='submit' value='Upload'>’+ ’</form>’ );}).listen(8080);回答2:

我也是formidable弄的上传

回答3:

使用formidable

// 需要本地安装 formidable ,参见 https://github.com/felixge/node-formidablevar formidable = require(’formidable’);var http = require(’http’);var fs = require(’fs’);var url = require(’url’);var path = require(’path’);// 文件将要上传到哪个文件夹下面var uploadfoldername = ’uploadfiles’;var uploadfolderpath = path.join(__dirname, uploadfoldername);// var server = ’192.168.1.5’;// var server = ’172.22.145.3’;var server = ’localhost’;var port = 8011;http.createServer(function (req, res) { console.log(’路由 ’ + req.url); // ----------------------用 ’/upload’ 这个路由来处理文件上传---------------------- if (req.url === ’/upload’ && req.method.toLowerCase() === ’post’) {console.log(’定位到 /upload 路由’);// 使用第三方的 formidable 插件初始化一个 form 对象var form = new formidable.IncomingForm();// 处理 requestform.parse(req, function (err, fields, files) { if (err) {return console.log(’formidable, form.parse err’); } console.log(’formidable, form.parse ok’); // 显示参数,例如 token console.log(’显示上传时的参数 begin’); console.log(fields); console.log(’显示上传时的参数 end’); var item; // 计算 files 长度 var length = 0; for (item in files) {length++; } if (length === 0) {console.log(’files no data’);return; } for (item in files) {var file = files[item];// formidable 会将上传的文件存储为一个临时文件,现在获取这个文件的目录var tempfilepath = file.path;// 获取文件类型var type = file.type;// 获取文件名,并根据文件名获取扩展名var filename = file.name;var extname = filename.lastIndexOf(’.’) >= 0? filename.slice(filename.lastIndexOf(’.’) - filename.length): ’’;// 文件名没有扩展名时候,则从文件类型中取扩展名if (extname === ’’ && type.indexOf(’/’) >= 0) { extname = ’.’ + type.split(’/’)[1];}// 将文件名重新赋值为一个随机数(避免文件重名)filename = Math.random().toString().slice(2) + extname;// 构建将要存储的文件的路径var filenewpath = path.join(uploadfolderpath, filename);// 将临时文件保存为正式的文件fs.rename(tempfilepath, filenewpath, function (err) { // 存储结果 var result = ’’; if (err) {// 发生错误console.log(’fs.rename err’);result = ’error|save error’; } else {// 保存成功console.log(’fs.rename done’);// 拼接图片url地址result = ’http://’ + server + ’:’ + port + ’/’ + uploadfoldername + ’/’ + filename; }// 返回结果 res.writeHead(200, {’Content-type’: ’text/html’ }); res.end(result);}); // fs.rename } // for in }); }}).listen(port);

相关文章: