Пример #1
0
  it('should consume all request data after error throw', async () => {
    const keepAliveAgent = new Agent({
      keepAlive: true,
    });
    // retry 10 times
    for (let i = 0; i < 10; i++) {
      const form = formstream();
      form.file('file1', path.join(__dirname, 'fixtures/bigdata.txt'));
      form.field('foo', 'fengmk2')
        .field('love', 'koa')
        .field('index', `${i}`);

      const headers = form.headers();
      const result = await urllib.request(`${host}/upload`, {
        method: 'POST',
        headers,
        stream: form,
        timing: true,
        agent: keepAliveAgent,
      });

      const data = result.data;
      const response = result.res;
      if (i === 0) {
        assert(response.keepAliveSocket === false);
      } else {
        assert(response.keepAliveSocket === true);
      }
      assert(response.status === 500);
      assert(data.toString().includes('Cannot read property &#39;error&#39; of undefined'));
      // wait for the request data is consumed by onerror
      await sleep(200);
    }
  });
Пример #2
0
    fs.stat(filepath, function(err, stat) {

        if(err){
            callback(err);
            return;
        }

        var form = formstream();
        form.file('media', filepath, path.basename(filepath), stat.size);

        var opts = {
            dataType: 'json',
            type: 'POST',
            headers: form.headers(),
            stream: form
        };

        urllib.request(url, opts, function(err, body, resp){

            if(err){
                callback(err);
                return;
            }

            if(body.errcode){
                callback(body);
                return;
            }

            callback(null, body.type, body.media_id, body.created_at);
        });
    });
Пример #3
0
  it('should upload with csrf', done => {
    const form = formstream();
    // form.file('file', filepath, filename);
    form.file('file', __filename);
    // other form fields
    form.field('foo', 'fengmk2').field('love', 'egg');
    // https://snyk.io/vuln/npm:qs:20170213
    form.field('[', 'toString');

    const headers = form.headers();
    headers.Cookie = cookies;
    urllib.request(`${host}/upload?_csrf=${csrfToken}`, {
      method: 'POST',
      headers,
      stream: form,
    }, (err, body, res) => {
      assert(!err);
      assert(res.statusCode === 200);
      const data = JSON.parse(body);
      assert(data.filename === 'multipart.test.js');
      assert.deepEqual(data.fields, {
        foo: 'fengmk2',
        love: 'egg',
        '[': 'toString',
      });
      done();
    });
  });
Пример #4
0
  return through.obj(function(file, enc, next) {
    if (!file.isBuffer()) return next();

    var self = this;
    var content = file.contents.toString();
    var form = formstream();
    var data = options.data || {};
    for (var key in data) {
      var value = data[key];
      if (typeof value === 'function') {
        form.field(key, value(file));
      } else {
        form.field(key, data[key]);
      }
    }

    var fileinputname = options.fileinputname || "file";
    form.file(fileinputname, file.path);

    var inputOptions = _.omit(options, 'server', 'data', 'fileinputname')
    var requestOptions = Object.assign({}, defaultOptions, inputOptions, {
      headers: form.headers(options.headers),
      stream: form
    })

    urllib.request(options.server, requestOptions, function (err, data, res) {
      callback(err, data, res);
      self.push(file);
      next();
    });
  });
Пример #5
0
function createMultipartForm(uploadToken, key, fsStream, putExtra, callbackFunc) {
    var postForm = formstream();
    postForm.field('token', uploadToken);
    if (key) {
        postForm.field('key', key);
    }
    postForm.stream('file', fsStream, putExtra.fname, putExtra.mimeType);

    //putExtra params
    for (var k in putExtra.params) {
        if (k.startsWith('x:')) {
            postForm.field(k, putExtra.params[k].toString());
        }
    }
    var fileBody = [];
    fsStream.on('data', function(data) {
        fileBody.push(data);
    });

    fsStream.on('end', function() {
        fileBody = Buffer.concat(fileBody);
        var bodyCrc32 = parseInt('0x' + getCrc32(fileBody));
        postForm.field('crc32', bodyCrc32);
    });
    callbackFunc(postForm);
}
Пример #6
0
function getMultipart(uptoken, key, body, extra) {

  var form = formstream();

  form.field('token', uptoken);
  if(key != exports.UNDEFINED_KEY) {
    form.field('key', key);
  }

  form.buffer('file', new Buffer(body), key, extra.mimeType);

  //extra['checkcrc']
  if (extra.checkCrc == 1) {
    var bodyCrc32 = getCrc32(body);
    extra.crc32 = '' + parseInt(bodyCrc32, 16);
  }

  if(extra.checkCrc) {
    form.field('crc32', extra.crc32);
  }

  for (var k in extra.params) {
    form.field(k, extra.params[k]);
  }

  return form;
}
Пример #7
0
Sling.prototype.uploadStream = function (contentPath, contentStream, callback) {
  var form = formstream()
    .field('_charset_', 'utf-8')
    .field('*@TypeHint', 'nt:file')
    .stream('*', contentStream, util.fileName(contentPath))

  this.formPost(util.dirName(contentPath), form, callback)
}
Пример #8
0
 API.prototype[method] = function (filepath, callback) {
   var form = formstream();
   form.file('media', filepath);
   form.headers({
     'Content-Type': 'application/json'
   });
   var url = this.fileServerPrefix + 'media/upload?access_token=' + this.token + '&type=' + type;
   urllib.request(url, {
     dataType: 'json',
     type: 'POST',
     headers: form.headers(),
     stream: form
   }, wrapper(callback));
 };
Пример #9
0
exports.uploadPageIcon = async function (filepath) {
  const { accessToken } = await this.ensureAccessToken();
  var stat = await statAsync(filepath);
  var form = formstream();
  form.file('media', filepath, path.basename(filepath), stat.size);
  var url = 'https://api.weixin.qq.com/shakearound/material/add?access_token=' + accessToken;
  var opts = {
    dataType: 'json',
    method: 'POST',
    timeout: 60000, // 60秒超时
    headers: form.headers(),
    data: form
  };
  return this.request(url, opts);
};
Пример #10
0
exports.uploadLogo = async function (filepath) {
  var stat = await statAsync(filepath);
  const { accessToken } = await this.ensureAccessToken();
  var form = formstream();
  form.file('buffer', filepath, path.basename(filepath), stat.size);
  var url = this.fileServerPrefix + 'media/uploadimg?access_token=' + accessToken;
  var opts = {
    dataType: 'json',
    method: 'POST',
    timeout: 60000, // 60秒超时
    headers: form.headers(),
    stream: form
  };
  return this.request(url, opts);
};
Пример #11
0
exports.uploadMaterial = function* (filepath, type) {
  var token = yield* this.ensureAccessToken();
  var stat = yield fs.stat(filepath);
  var form = formstream();
  form.file('media', filepath, path.basename(filepath), stat.size);
  var url = prefixUrl + 'material/add_material?access_token=' + token.accessToken + '&type=' + type;
  var opts = {
    dataType: 'json',
    type: 'POST',
    timeout: 60000, // 60秒超时
    headers: form.headers(),
    stream: form
  };
  return yield* this.request(url, opts);
};
Пример #12
0
 fs.stat(filepath, function (err, stat) {
   if (err) {
     return callback(err);
   }
   var form = formstream();
   form.file('buffer', filepath, path.basename(filepath), stat.size);
   var url = that.fileServerPrefix + 'media/uploadimg?access_token=' + that.token.accessToken;
   var opts = {
     dataType: 'json',
     type: 'POST',
     timeout: 60000, // 60秒超时
     headers: form.headers(),
     stream: form
   };
   that.request(url, opts, wrapper(callback));
 });
Пример #13
0
 fs.stat(filepath, function (err, stat) {
   if (err) {
     return callback(err);
   }
   var form = formstream();
   form.file('media', filepath, path.basename(filepath), stat.size);
   var url = 'https://api.weixin.qq.com/shakearound/material/add?access_token=' + that.token.accessToken;
   var opts = {
     dataType: 'json',
     type: 'POST',
     timeout: 60000, // 60秒超时
     headers: form.headers(),
     stream: form
   };
   that.request(url, opts, callback);
 });
Пример #14
0
 fs.stat(filepath, function (err, stat) {
   if (err) {
     return callback(err);
   }
   var form = formstream();
   form.file('media', filepath, path.basename(filepath), stat.size);
   var url = that.prefix + 'material/add_material?access_token=' + that.token.accessToken + '&type=' + type;
   var opts = {
     dataType: 'json',
     type: 'POST',
     timeout: 60000, // 60秒超时
     headers: form.headers(),
     stream: form
   };
   that.request(url, opts, wrapper(callback));
 });
Пример #15
0
 fs.stat(filepath, function (err, stat) {
   if (err) {
     return callback(err);
   }
   var form = formstream();
   form.file('media', filepath, path.basename(filepath), stat.size);
   var prefix = 'http://api.weixin.qq.com/';
   var url = prefix + 'customservice/kfaccount/uploadheadimg?access_token=' + that.token.accessToken + '&kf_account=' + account;
   var opts = {
     dataType: 'json',
     type: 'POST',
     timeout: 60000, // 60秒超时
     headers: form.headers(),
     stream: form
   };
   that.request(url, opts, wrapper(callback));
 });
Пример #16
0
 it('should upload file with formstream', function (done) {
   var form = formstream();
   form.file('file', __filename);
   form.field('hello', '你好urllib');
   var args = {
     type: 'POST',
     headers: form.headers(),
     stream: form
   };
   urllib.request(host + '/stream', args, function (err, data, res) {
     should.not.exist(err);
     data = data.toString();
     data.should.include('你好urllib\r\n----------------------------');
     data.should.include('Content-Disposition: form-data; name="file"; filename="urllib.test.js"');
     done();
   });
 });
Пример #17
0
 fs.stat(filepath, function (err, stat) {
   if (err) {
     return callback(err);
   }
   var form = formstream();
   form.file('media', filepath, path.basename(filepath), stat.size);
   form.headers({
     'Content-Type': 'application/json'
   });
   var url = that.fileServerPrefix + 'media/upload?access_token=' + that.token + '&type=' + type;
   var opts = {
     dataType: 'json',
     type: 'POST',
     timeout: 60000, // 60秒超时
     headers: form.headers(),
     stream: form
   };
   urllib.request(url, opts, wrapper(callback));
 });
Пример #18
0
    it('should post stream', function(done) {
      var form = formstream();
      form.file('file1', __filename);
      form.field('hello', '你好urllib');
      var args = {
        timeout: 30000,
        method: 'post',
        dataType: 'json',
        headers: form.headers(),
        stream: form
      };

      var url = 'http://httpbin.org/post';
      urllib.request(url, args, function (err, data, res) {
        should.not.exist(err);
        data.files.file1.should.be.a.String;
        data.form.hello.should.equal('你好urllib');
        res.status.should.equal(200);
        done();
      });
    });
Пример #19
0
		fs.stat(filepath, function(err, stat) {
			if (err) {
				return callback(err);
			}
			var form = formstream();
			form.file('media', filepath, path.basename(filepath), stat.size);
			var url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg";

			url+="?access_token=" + token;

			var opts = {
				dataType: 'json',
				type: 'POST',
				timeout: 60000, // 60秒超时
				headers: form.headers(),
				stream: form
			};
			console.log("headers",opts.headers);
			//urllib.request(url, options, callback);
			urllib.request(url, opts, function(){
				console.log("post weixin return:",arguments);
			});
		});
Пример #20
0
exports.pornDetectFile = function(pornFile, callback) {
    var sign  = auth.getPornDetectSign();
    if( -1 == sign || -2 == sign){
        var data = {
                'code':9, 
                'message':'Secret id or key is empty.', 
                'data':{}
        }
        callback(data);
    }

    var form = formstream();
    for (var i = 0; i < pornFile.length; i++) {
        filePath = pornFile[i];
        var isExists = fs.existsSync(filePath);
        if (isExists) {
            var stats = fs.statSync(filePath);
            var fileSizeInBytes = stats["size"];
            form.file('image['+i.toString()+']', filePath, filePath, fileSizeInBytes);
        }
        else{
            callback({'httpcode':0, 'code':-1, 'message':'file '+filePath+' not exists', 'data':{}});
        }
    }

    form.field('appid', conf.APPID).field('bucket', conf.BUCKET);

    var headers = form.headers({
        'Authorization': sign,
    });

    var url = conf.API_PRONDETECT_URL;
    var urlInfo = urlM.parse(url);
    var options = {
        hostname: urlInfo.hostname,
        port: urlInfo.port || 80,
        path: urlInfo.path,
        method: 'POST',
        timeout: TIME_OUT,
        headers: headers
    };

    var req = http.request(options, function (res) {
        
        res.on('data', function (data) {
            var ret = {};
            
            try {
                var ret = JSON.parse(data.toString());
            } catch (err) {
                ret = {};
            }
            if (ret) {
                var rets = ret.result_list;
                if(rets){
                    var result = {};
                    for(var i = 0; i < rets.length; i++){
                        var res = {
                            'code':rets[i].code, 
                            'message':rets[i].message || '', 
                            'filename':rets[i].filename || '', 
                            'data':{},
                        }

                        if (0 == rets[i].code) {
                            res.data = {
                                'result':rets[i].data.result || '0',
                                'confidence':rets[i].data.confidence || '0',
                                'normal score':rets[i].data.normal_score || '0',
                                'hot score':rets[i].data.hot_score || '0',
                                'p**n score':rets[i].data.porn_score || '0',
                                'forbid status':rets[i].data.forbid_status || '0',
                            }
                        }
                        result[i] = res;
                    }
                    callback(result);
                }
                else{
                    var res = {
                        'code':ret.code, 
                        'message':ret.message || '', 
                        'data':{},
                    }
                    callback(res);
                }
            } else {
                callback({'code':-1, 'message':'response '+data.toString()+' is not json', 'data':{}});
            }
        });
    });
    form.pipe(req);
}