Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 用户直接上传到AmazonS3的流_Node.js_Amazon S3_Express - Fatal编程技术网

Node.js 用户直接上传到AmazonS3的流

Node.js 用户直接上传到AmazonS3的流,node.js,amazon-s3,express,Node.js,Amazon S3,Express,在过去的几天里,我一直在努力让它工作 基本上我有一个HTML表单,它有一个type=“file”输入 我希望这个文件被发送到nodejs并直接流式传输到amazons3。通过这种方式,我将在服务器上使用更少的存储空间(想象一下,如果100人上传1g,最后我的服务器将有100g),因此,如果我流式传输,我将只占用内存一小部分时间 有没有关于如何使用express实现这一点的提示?我不确定您是在寻找CORS方法,即用户直接上传到S3存储桶,还是使用express作为中间人 如果您正在考虑CORS方法

在过去的几天里,我一直在努力让它工作

基本上我有一个HTML表单,它有一个
type=“file”
输入

我希望这个文件被发送到nodejs并直接流式传输到amazons3。通过这种方式,我将在服务器上使用更少的存储空间(想象一下,如果100人上传1g,最后我的服务器将有100g),因此,如果我流式传输,我将只占用内存一小部分时间


有没有关于如何使用express实现这一点的提示?

我不确定您是在寻找CORS方法,即用户直接上传到S3存储桶,还是使用express作为中间人

如果您正在考虑CORS方法(我建议您在将文件放入S3之前对其进行任何特殊处理,而这是客户端无法完成的),这应该可以帮助您:


如果您计划使用服务器作为中间点(即,上传到服务器,然后从服务器上传到S3),我已经听说了Knox()的好消息。我已经试过了,但实际上并没有使用它,因为我倾向于使用CORS方法。

我不确定您是在寻找一种CORS方法,用户直接上传到您的S3存储桶,还是使用express作为中间人

如果您正在考虑CORS方法(我建议您在将文件放入S3之前对其进行任何特殊处理,而这是客户端无法完成的),这应该可以帮助您:


如果您计划使用服务器作为中间点(即,上传到服务器,然后从服务器上传到S3),我已经听说了Knox()的好消息。我已经使用过它,但实际上没有使用过它,因为我倾向于使用CORS方法。

我认为还有第三种方法,即在您将文件节点直接发送到amazon时“流式传输”文件,不是吗?这里的任何信息()都可能有用,因为您的问题似乎是重复的。至于第三种选择,我不太确定,因为我从来没有研究过。如果你打算这样做,你可以使用CORS,完全减轻服务器的负担。实际上,我正在寻找第三种选择:等等,如果我使用CORS,从后端检查事务的状态会不会很复杂?我如何知道亚马逊生成的链接的地址?我怎么知道用户是否操纵了它?我觉得这是一种控制力的下降。我所做的如下:1)用户试图上传。我向服务器请求S3凭据。这将返回文章中提到的“清单”。它还为S3上的位置(用作键)生成一个文件路径,并将所有文件信息插入数据库,标记为不完整。2) 当客户机获得此信息时,它将启动CORS上载。3) 上传完成后,向我的服务器发出请求,将db行更新为complete。4) 此时,提醒用户uplaod已成功,这是一个已签名的请求。在服务器上生成凭据时,您拥有凭据对象,其中包括密钥(它将另存为的路径)、有效起始时间、上载权限等。您的响应还包括签名,这是使用AWS密钥对对象进行的base64编码。我现在不记得怎么做了,但文档中已经解释过了。AWS然后用密钥对对象进行编码(只有您和AWS知道该密钥)。如果不匹配(例如,用户更改了某些内容),则请求将被拒绝。我认为还有第三种方法,即在将文件节点直接发送到amazon时“流式传输”文件,不是吗?此处的任何信息()都可能有用,因为您的问题似乎是重复的。至于第三种选择,我不太确定,因为我从来没有研究过。如果你打算这样做,你可以使用CORS,完全减轻服务器的负担。实际上,我正在寻找第三种选择:等等,如果我使用CORS,从后端检查事务的状态会不会很复杂?我如何知道亚马逊生成的链接的地址?我怎么知道用户是否操纵了它?我觉得这是一种控制力的下降。我所做的如下:1)用户试图上传。我向服务器请求S3凭据。这将返回文章中提到的“清单”。它还为S3上的位置(用作键)生成一个文件路径,并将所有文件信息插入数据库,标记为不完整。2) 当客户机获得此信息时,它将启动CORS上载。3) 上传完成后,向我的服务器发出请求,将db行更新为complete。4) 此时,提醒用户uplaod已成功,这是一个已签名的请求。在服务器上生成凭据时,您拥有凭据对象,其中包括密钥(它将另存为的路径)、有效起始时间、上载权限等。您的响应还包括签名,这是使用AWS密钥对对象进行的base64编码。我现在不记得怎么做了,但文档中已经解释过了。AWS然后用密钥对对象进行编码(只有您和AWS知道该密钥)。如果它不匹配(例如,因为用户更改了某些内容),那么请求将被拒绝。