请问Nodejs中npm 的request 如何实现上传文件?

请问Nodejs中npm 的request 如何实现上传文件?

https://github.com/mikeal/request 我有个上传的url,需要获取到一个post表单的desc的值,如何还有个request.files.get(“img”),请问如何使用request来提交?谢谢!试了下面的代码都无效。

var r = request.post('http://service.com/upload', function optionalCallback (err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
})
var form = r.form()
form.append('my_field', 'my_value')
form.append('my_buffer', new Buffer([1, 2, 3]))
form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')))
form.append('remote_file', request('http://google.com/doodle.png'))

5 回复

当然可以。request 模块本身并不直接支持文件上传功能,但可以通过与 form-data 模块结合使用来实现这一需求。以下是如何使用 requestform-data 来实现文件上传的示例。

首先,确保你已经安装了 requestform-data 模块:

npm install request form-data

接下来,你可以使用以下代码来实现文件上传:

const request = require('request');
const FormData = require('form-data');
const fs = require('fs');

// 定义上传的URL
const url = 'http://service.com/upload';

// 创建FormData实例
const form = new FormData();

// 添加表单字段
form.append('desc', '这是描述信息');
form.append('img', fs.createReadStream('/path/to/your/image.jpg'));

// 使用request发送POST请求
request.post(
    { 
        url: url,
        formData: form
    },
    (err, httpResponse, body) => {
        if (err) {
            return console.error('上传失败:', err);
        }
        console.log('上传成功! 服务器响应为:', body);
    }
);

// 确保在所有操作完成后关闭FormData实例
form.on('close', () => {
    console.log('上传完成,关闭FormData实例');
});

代码解析

  1. 引入模块:我们引入了 requestform-data 模块,并且也用到了 Node.js 自带的 fs 模块来读取文件。

  2. 创建FormData实例:通过 new FormData() 创建了一个新的 FormData 实例。

  3. 添加表单字段:使用 form.append 方法添加了两个字段:一个是文本字段 desc,另一个是文件字段 img。这里假设你要上传的图片路径为 /path/to/your/image.jpg

  4. 发送POST请求:使用 request.post 方法发送 POST 请求,并将 FormData 实例作为请求体的一部分传递给 formData 属性。

  5. 处理响应:在回调函数中处理请求的响应。如果发生错误,则输出错误信息;如果没有错误,则输出服务器的响应。

  6. 关闭FormData实例:在所有操作完成后,监听 FormData 实例的 close 事件,以确保在所有操作完成后关闭该实例。

这样,你就能够使用 requestform-data 模块来实现文件上传功能了。希望这对你有所帮助!


没看懂你的服务端到底是什么

我觉得是你的服务器端代码写的有问题,这个代码我在服务器端用node-formidable,没问题的。

官网…

要使用 request 模块在 Node.js 中上传文件,你可以参照以下示例代码。request 模块提供了一种简单的方式来处理 HTTP 请求,并且可以通过表单数据(包括文件)进行 POST 提交。

示例代码

首先确保你已经安装了 requestform-data 模块:

npm install request form-data

然后你可以使用以下代码来上传文件:

const request = require('request');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('desc', '这是描述信息');
form.append('img', fs.createReadStream('/path/to/your/image.jpg'));

request.post({
    url: 'http://service.com/upload',
    formData: form
}, (err, httpResponse, body) => {
    if (err) {
        return console.error('上传失败:', err);
    }
    console.log('上传成功! 服务器响应为:', body);
});

解释

  1. 引入模块:首先引入 requestform-data 模块。
  2. 创建表单数据:使用 FormData 类创建一个表单数据对象,并通过 append 方法添加字段和文件。
  3. 发起请求:使用 request.post 方法发送带有表单数据的 POST 请求。formData 参数应该包含表单数据对象。
  4. 处理响应:在回调函数中处理服务器响应或错误。

注意事项

  • fs.createReadStream 用于读取本地文件,将文件流传递给 FormData.append 方法。
  • 如果你需要从远程 URL 获取文件,可以考虑使用其他方法先下载文件,再上传。
  • 请根据实际情况调整文件路径和描述信息。

以上就是使用 request 模块上传文件的基本方法。

回到顶部