Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用formidable和(knox或aws-sdk)将文件流上传到Node.js上的S3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 aws-sdkknox将通过表单提交的文件直接上传到Amazon S3存储桶.表单处理在 formidable完成.

我的问题是:如何使用aws-sdk(或knoX)使用这些库的最新功能处理流来正确使用强大的功能

我知道这个主题已经在这里被提出了不同的风格,即:

> How to receive an uploaded file using node.js formidable library and save it to Amazon S3 using knox?
> node application stream file upload directly to amazon s3
> Accessing the raw file stream from a node-formidable file upload(以及关于覆盖form.onPart()的非常有用的接受答案)

但是,我认为答案有点过时和/或偏离主题(即CORS支持,我现在不希望出于各种原因使用)和/或最重要的是,没有提及来自的最新功能aws-sdk(参见:https://github.com/aws/aws-sdk-js/issues/13#issuecomment-16085442)或knox(特别是putStream()或其readableStream.pipe(req)变体,both explained in the doc).

经过几个小时的挣扎,我得出结论,我需要一些帮助(免责声明:我是一个流媒体的新手).

HTML表单:

<form action="/uploadPicture" method="post" enctype="multipart/form-data">
  <input name="picture" type="file" accept="image/*">
  <input type="submit">
</form>

Express bodyParser中间件以这种方式配置:

app.use(express.bodyParser({defer: truE}))

POST请求处理程序:

uploadPicture = (req,res,next) ->
  form = new formidable.IncomingForm()
  form.parse(req)

  form.onPart = (part) ->
    if not part.filename
      # Let formidable handle all non-file parts (fields)
      form.handlePart(part)
    else
      handlePart(part,form.bytesExpected)

  handlePart = (part,fileSizE) ->
    # aws-sdk version
    params =
      Bucket: "mybucket"
      Key: part.filename
      ContentLength: fileSize
      Body: part # passing stream object as body parameter

    awsS3client.putObject(params,(err,data) ->
      if err
        console.log err
      else
        console.log data
    )

但是,我收到以下错误

以这种方式定制的knox版本的handlePart()函数也惨遭失败:

handlePart = (part,fileSizE) ->
  headers =
    "Content-Length": fileSize
    "Content-Type": part.mime
  knoxS3client.putStream(part,part.filename,headers,res) ->
    if err
      console.log err
    else
      console.log res
  )

我还得到一个带有400 statusCode的大型res对象.

在两种情况下,区域都配置为eu-West-1.

补充笔记:

解决方法

好吧,according to the creator of Formidable,直接流式传输到Amazon S3是不可能的

实际上,form.bytesExpected指的是整个表单的大小,而不是单个文件的大小.

因此,在上传到S3之前,数据必须首先点击服务器上的内存或磁盘.

大佬总结

以上是大佬教程为你收集整理的使用formidable和(knox或aws-sdk)将文件流上传到Node.js上的S3全部内容,希望文章能够帮你解决使用formidable和(knox或aws-sdk)将文件流上传到Node.js上的S3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。