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()
|