我正在尝试使用aws-sdk或knox将通过html" target="_blank">表单提交的文件直接上传到Amazon
S3存储桶。表单处理非常强大。
我的问题是:如何使用这些库的最新功能来正确处理aws-sdk(或knox)的强大功能?
但是,我认为答案有点过时和/或偏离主题(例如,出于各种原因,我现在不希望使用CORS支持),和/或最重要的是,请勿参考的最新功能。要么是aws-
sdk(请参阅:https : //github.com/aws/aws-sdk-js/issues/13#issuecomment-16085442)或knox(尤其是putStream()或它的可读Stream.pipe(req)变体,两者都解释了在文档中)。
经过数小时的奋斗,我得出的结论是我需要一些帮助(免责声明:我是使用流技术的新手)。
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
)
但是,出现以下错误:
{[[RequestTimeout:在超时时间内未读取或写入您与服务器的套接字连接。空闲连接将关闭。]
消息:“在超时时间内未读取或写入您与服务器的套接字连接。空闲连接将关闭。”,代码:“ RequestTimeout”,名称:“
RequestTimeout”,statusCode:400,可重试:false}
以这种方式定制的knox版本的handlePart()函数也不幸失败了:
handlePart = (part, fileSize) ->
headers =
"Content-Length": fileSize
"Content-Type": part.mime
knoxS3client.putStream(part, part.filename, headers, (err, res) ->
if err
console.log err
else
console.log res
)
我还在某个地方得到了一个带有400 statusCode的大型res对象。
在两种情况下,区域均配置为 eu-west-1 。
补充笔记:
节点0.10.12
从npm(1.0.14)起最新
来自npm(1.3.1)的最新aws-sdk
来自npm的最新诺克斯(0.8.3)
好吧,据Formidable的创建者说,不可能直接流到Amazon S3:
S3 API要求您在创建新文件时提供它们的大小。在完全接收多部分/表单数据文件之前,此信息不可用。这意味着流是不可能的。
实际上, form.bytesExpected 是指整个表单的大小,而不是单个文件的大小。
因此,在将数据上传到S3之前,必须先将其击中内存或服务器上的磁盘。
我正在尝试使用aws sdk或knox将通过表单提交的文件直接流式上传到Amazon S3 bucket。表单处理是通过强大的。 我的问题是:如何正确地使用aws sdk(或knox)中的强大功能,使用这些库的每个最新功能来处理流? 我知道这里已经有人以不同的方式问过这个话题,比如: 如何使用node接收上传的文件。js强大的库并使用knox将其保存到Amazon S3 节点应用程序流文件直接上传
更新:为了将来的参考,亚马逊现在已经更新了询问时的文档。根据@Loren Segal在下面的评论:- 我们已经更正了最新预览版中的文档,以正确记录此参数。很抱歉搞砸了! 有人能帮我使用上传二进制文件吗?
我正在尝试使用node.jsaws-sdk将大文件上传到s3存储桶。 方法以分段上传方式完整上传文件。 我想使用新的V3 aws-sdk。在新版本中上传大文件的方法是什么?方法似乎没有这样做。 我见过一些方法,例如,但我似乎找不到使用它们的完整工作示例。 先谢谢你。
我正在尝试使用jQuery文件上传和aws sdk gem在Rails中实现直接到AmazonS3上传,并遵循heroku的直接到S3上传说明。这是在html中生成的上载表单: 这是相应的jQuery: 尝试上传文件会产生以下日志: 表单提交成功,但由于Rails没有在S3上保存正确的位置(“picture”,一个字符串),表单无法工作;相反,它认为地点是 您可以在提交的参数中看到这一点。应该是这
问题内容: 我正在尝试找到一些利用node.js,Express和knox的示例代码。 Knox的文档仅给出有关如何上传已存储在文件系统中的文件的清晰示例。https://github.com/learnboost/knox#readme 此外,还有许多简单的教程(甚至在Express本身中),介绍了如何直接上传文件以表达并保存到文件系统。 我遇到的麻烦是一个示例,该示例使您可以将客户端上传的文件
问题内容: 通过使用Express with Node,我可以成功上传文件,并通过以下代码块将其传递到Azure存储。 这很好用,但是Express创建一个临时文件并首先存储图像,然后将其从文件上传到Azure。这似乎是该过程中效率低下和不必要的步骤,而我最终不得不管理临时文件目录的清理。 我应该能够使用Azure SDK中的方法将文件直接流式传输到Azure存储,但是我对Node或Express