标签: multiparty

如何推迟流读取调用

streams一般来说,我仍然试图改变自己的方式.我已经能够从内部使用multiparty流式传输大型文件form.on('part').但我需要推迟调用并在读取之前解析流.我曾尝试PassThrough,through.through2,但已经得到了不同的结果,它主要挂起,我无法弄清楚该怎么做,也没有步骤调试.我对所有选择都持开放态度.感谢您的所有见解.

import multiparty from 'multiparty'
import {
  PassThrough
} from 'stream';
import through from 'through'
import through2 from 'through2'

export function promisedMultiparty(req) {
  return new Promise((resolve, reject) => {

    const form = new multiparty.Form()
    const form_files = []
    let q_str = ''

    form.on('field', (fieldname, value) => {
      if (value) q_str = appendQStr(fieldname, value, q_str)
    })

    form.on('part', async (part) => {
      if (part.filename) {

        const pass1 = new PassThrough() // …
Run Code Online (Sandbox Code Playgroud)

javascript through2 node-streams multiparty

10
推荐指数
1
解决办法
244
查看次数

使用 request 和 multiparty 进行 multipart/form-data 时,出现错误:uncaughtException:source.on 不是函数

我正在尝试将数据从我的节点应用程序发送到第 3 方 HTTP 端点。

我正在使用多方模块解析来自客户端的请求对象上的数据,并通过请求模块发送数据。我收到错误

错误:uncaughtException:source.on 不是函数

var request = require('request');
const multiparty = require('multiparty');

function addAttachment(req, res) {
  let form = new multiparty.Form();
  let parsedFile = {};
  const formData = {};
  form.parse(req, function(err, fields, files){
    Object.keys(fields).forEach(function(name) {
      formData[name] = fields[name][0];
    });

    Object.keys(files).forEach(function(name) {
      logger.debug(name);
      parsedFile[name] = files[name][0];
    });
    formData.uploadFile = parsedFile.uploadFile;
    logger.debug('formData ', formData);

    reqOptions.url = imageURL;
    reqOptions.formData = formData;

    logger.debug('REQ_OPTIONS ', reqOptions);

    request.post(reqOptions, function (err, response, body) {
      if (err) {
        logger.warn(req, ' Error sending attachment', err); …
Run Code Online (Sandbox Code Playgroud)

multipartform-data node.js node-request multiparty

5
推荐指数
2
解决办法
2万
查看次数

将分段上传部分传输到新请求时出现“标题内容包含无效字符”错误

我的快递服务器接收来自浏览器的文件上传。上传作为multipart/form-data请求传输;我使用多方来解析传入的实体主体。

Multiparty 允许您将一部分(粗略地说,单个表单字段,如<input type="file">)作为可读流。我不想在我的 Web 服务器上处理或存储上传的文件,所以我只是将上传的文件部分通过管道传输到另一个服务的请求中(使用请求模块)。

app.post('/upload', function(req, res) {
    var form = new multiparty.Form();

    form.on('part', function(part) {

        var serviceRequest = request({
            method: 'POST',
            url: 'http://other-service/process-file',
            headers: {
                'Content-Type': 'application/octet-stream'
            }
        }, function(err, svcres, body) {
            // handle response
        });

        part.pipe(serviceRequest);
    });

    form.parse(req);
});
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都能正常工作。node 自动应用分块传输编码,当浏览器上传文件字节时,它们作为原始实体主体(没有多部分格式)正确发送到后端服务,最终获取完整文件并成功返回。

但是,有时请求会失败并且我的回调会被调用err

TypeError: The header content contains invalid characters 
    at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:360:11) 
    at new ClientRequest (_http_client.js:85:14) 
    at Object.exports.request (http.js:31:10) 
    at Object.exports.request (https.js:199:15) 
    at Request.start (/app/node_modules/request/request.js:744:32) …
Run Code Online (Sandbox Code Playgroud)

multipartform-data node.js express requestjs multiparty

2
推荐指数
2
解决办法
2万
查看次数

承诺多方

我承诺多方使用它的 form.parse。它工作正常,但 form.parse 不会返回我可以使用的 then/catch 值的承诺。

var Promise = require('bluebird');
var multiparty = Promise.promisifyAll(require('multiparty'), {multiArgs:true})
var form = new multiparty.Form();
form.parse({}).then((data)=>{console.log(data)});
Run Code Online (Sandbox Code Playgroud)

node.js promise bluebird multiparty

0
推荐指数
1
解决办法
1149
查看次数