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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1014 B
						
					
					
				
			
		
		
	
	
							53 lines
						
					
					
						
							1014 B
						
					
					
				| 'use strict'
 | |
| 
 | |
| const http = require('http')
 | |
| const Readable = require('stream').Readable
 | |
| const FormData = require('form-data')
 | |
| const pump = require('pump')
 | |
| const knownLength = 1024 * 1024 * 1024
 | |
| 
 | |
| function next () {
 | |
|   let total = knownLength
 | |
|   const form = new FormData({ maxDataSize: total })
 | |
|   const rs = new Readable({
 | |
|     read (n) {
 | |
|       if (n > total) {
 | |
|         n = total
 | |
|       }
 | |
| 
 | |
|       // poor man random data
 | |
|       // do not use in prod, it can leak sensitive informations
 | |
|       const buf = Buffer.allocUnsafe(n)
 | |
|       this.push(buf)
 | |
| 
 | |
|       total -= n
 | |
| 
 | |
|       if (total === 0) {
 | |
|         this.push(null)
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| 
 | |
|   form.append('my_field', 'my value')
 | |
|   form.append('upload', rs, {
 | |
|     filename: 'random-data',
 | |
|     contentType: 'binary/octet-stream',
 | |
|     knownLength
 | |
|   })
 | |
| 
 | |
|   const opts = {
 | |
|     protocol: 'http:',
 | |
|     hostname: 'localhost',
 | |
|     port: 3000,
 | |
|     path: '/upload',
 | |
|     headers: form.getHeaders(),
 | |
|     method: 'POST'
 | |
|   }
 | |
| 
 | |
|   const req = http.request(opts, next)
 | |
| 
 | |
|   pump(form, req)
 | |
| }
 | |
| 
 | |
| next()
 |