You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					208 lines
				
				5.9 KiB
			
		
		
			
		
	
	
					208 lines
				
				5.9 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# formstream
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[![NPM version][npm-image]][npm-url]
							 | 
						||
| 
								 | 
							
								[![build status][travis-image]][travis-url]
							 | 
						||
| 
								 | 
							
								[![Test coverage][coveralls-image]][coveralls-url]
							 | 
						||
| 
								 | 
							
								[![David deps][david-image]][david-url]
							 | 
						||
| 
								 | 
							
								[![npm download][download-image]][download-url]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[npm-image]: https://img.shields.io/npm/v/formstream.svg?style=flat-square
							 | 
						||
| 
								 | 
							
								[npm-url]: https://npmjs.org/package/formstream
							 | 
						||
| 
								 | 
							
								[travis-image]: https://img.shields.io/travis/node-modules/formstream.svg?style=flat-square
							 | 
						||
| 
								 | 
							
								[travis-url]: https://travis-ci.org/node-modules/formstream
							 | 
						||
| 
								 | 
							
								[coveralls-image]: https://img.shields.io/coveralls/node-modules/formstream.svg?style=flat-square
							 | 
						||
| 
								 | 
							
								[coveralls-url]: https://coveralls.io/r/node-modules/formstream?branch=master
							 | 
						||
| 
								 | 
							
								[david-image]: https://img.shields.io/david/node-modules/formstream.svg?style=flat-square
							 | 
						||
| 
								 | 
							
								[david-url]: https://david-dm.org/node-modules/formstream
							 | 
						||
| 
								 | 
							
								[download-image]: https://img.shields.io/npm/dm/formstream.svg?style=flat-square
							 | 
						||
| 
								 | 
							
								[download-url]: https://npmjs.org/package/formstream
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A [multipart/form-data](http://tools.ietf.org/html/rfc2388) encoded stream, helper for file upload.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Install
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								$ npm install formstream
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Quick Start
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var formstream = require('formstream');
							 | 
						||
| 
								 | 
							
								var http = require('http');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var form = formstream();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// form.file('file', filepath, filename);
							 | 
						||
| 
								 | 
							
								form.file('file', './logo.png', 'upload-logo.png');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// other form fields
							 | 
						||
| 
								 | 
							
								form.field('foo', 'fengmk2').field('love', 'aerdeng');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// even send file content buffer directly
							 | 
						||
| 
								 | 
							
								// form.buffer(name, buffer, filename, mimeType)
							 | 
						||
| 
								 | 
							
								form.buffer('file2', new Buffer('This is file2 content.'), 'foo.txt');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var options = {
							 | 
						||
| 
								 | 
							
								  method: 'POST',
							 | 
						||
| 
								 | 
							
								  host: 'upload.cnodejs.net',
							 | 
						||
| 
								 | 
							
								  path: '/store',
							 | 
						||
| 
								 | 
							
								  headers: form.headers()
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								var req = http.request(options, function (res) {
							 | 
						||
| 
								 | 
							
								  console.log('Status: %s', res.statusCode);
							 | 
						||
| 
								 | 
							
								  res.on('data', function (data) {
							 | 
						||
| 
								 | 
							
								    console.log(data.toString());
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								form.pipe(req);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Chaining
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var fs = require('fs');
							 | 
						||
| 
								 | 
							
								var formstream = require('formstream');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var filepath = './logo.png';
							 | 
						||
| 
								 | 
							
								fs.stat(filepath, function (err, stat) {
							 | 
						||
| 
								 | 
							
								  formstream().field('status', 'share picture')
							 | 
						||
| 
								 | 
							
								      .field('access_token', 'your access token')
							 | 
						||
| 
								 | 
							
								      .file('pic', filepath, 'logo.png', stat.size)
							 | 
						||
| 
								 | 
							
								      .pipe(process.stdout); // your request stream
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API Doc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### formstream()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Create a form instance.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Form - form instance
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### FormStream#field(name, value)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add a normal field to the form.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **name** String - Name of field
							 | 
						||
| 
								 | 
							
								- **value** String - Value of field
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Form - form instance
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### FormStream#file(name, filepath[, filename][, filesize])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add a local file to be uploaded to the form.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **name** String - Name of file field
							 | 
						||
| 
								 | 
							
								- **filepath** String - Local path of the file to be uploaded
							 | 
						||
| 
								 | 
							
								- ***filename*** String - Optional. Name of the file (will be the base name of `filepath` if empty)
							 | 
						||
| 
								 | 
							
								- ***filesize*** Number - Optional. Size of the file (will not generate `Content-Length` header if not specified)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Form - form instance
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### FormStream#buffer(name, buffer, filename[, contentType])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add a buffer as a file to upload.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **name** String - Name of field
							 | 
						||
| 
								 | 
							
								- **buffer** Buffer - The buffer to be uploaded
							 | 
						||
| 
								 | 
							
								- **filename** String - The file name that tells the remote server
							 | 
						||
| 
								 | 
							
								- ***contentType*** String - Optional. Content-Type (aka. MIME Type) of content (will be infered with `filename` if empty)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Form - form instance
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### FormStream#stream(name, stream, filename[, contentType][, size])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add a readable stream as a file to upload. Event 'error' will be emitted if an error occured.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **name** String - Name of field
							 | 
						||
| 
								 | 
							
								- **stream** [stream.Readable](http://nodejs.org/api/stream.html#stream_class_stream_readable) - A readable stream to be piped
							 | 
						||
| 
								 | 
							
								- **filename** String - The file name that tells the remote server
							 | 
						||
| 
								 | 
							
								- ***contentType*** String - Optional. Content-Type (aka. MIME Type) of content (will be infered with `filename` if empty)
							 | 
						||
| 
								 | 
							
								- ***size*** Number - Optional. Size of the stream (will not generate `Content-Length` header if not specified)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Form - form instance
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### FormStream#headers([headers])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Get headers for the request.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- ***headers*** Object - Additional headers
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var headers = form.headers({
							 | 
						||
| 
								 | 
							
								  'Authorization': 'Bearer kei2akc92jmznvnkeh09sknzdk',
							 | 
						||
| 
								 | 
							
								  'Accept': 'application/vnd.github.v3.full+json'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object - Headers to be sent.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Event 'error'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted if there was an error receiving data.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Event 'data'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The 'data' event emits when a Buffer was used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [Node.js Documentation](http://nodejs.org/api/stream.html#stream_event_data) for more.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Event 'end'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emitted when the stream has received no more 'data' events will happen.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [Node.js Documentation](http://nodejs.org/api/stream.html#stream_event_end) for more.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(The MIT License)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright (c) 2012 - 2014 fengmk2 <fengmk2@gmail.com>
							 | 
						||
| 
								 | 
							
								Copyright(c) node-modules and other contributors.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Permission is hereby granted, free of charge, to any person obtaining
							 | 
						||
| 
								 | 
							
								a copy of this software and associated documentation files (the
							 | 
						||
| 
								 | 
							
								'Software'), to deal in the Software without restriction, including
							 | 
						||
| 
								 | 
							
								without limitation the rights to use, copy, modify, merge, publish,
							 | 
						||
| 
								 | 
							
								distribute, sublicense, and/or sell copies of the Software, and to
							 | 
						||
| 
								 | 
							
								permit persons to whom the Software is furnished to do so, subject to
							 | 
						||
| 
								 | 
							
								the following conditions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The above copyright notice and this permission notice shall be
							 | 
						||
| 
								 | 
							
								included in all copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
							 | 
						||
| 
								 | 
							
								EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						||
| 
								 | 
							
								MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
							 | 
						||
| 
								 | 
							
								IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
							 | 
						||
| 
								 | 
							
								CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
							 | 
						||
| 
								 | 
							
								TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
							 | 
						||
| 
								 | 
							
								SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
							 |