如何使用Node.js将文件直接上传到Amazon Cloud Front

如何使用Node.js将文件直接上传到Amazon Cloud Front,node.js,amazon-web-services,amazon-s3,amazon-cloudfront,Node.js,Amazon Web Services,Amazon S3,Amazon Cloudfront,我刚刚配置了一个AmazonCloudFront发行版,并将其连接到现有的AmazonS3存储桶。话虽如此,这个存储桶可以存储10GB到40GB的视频文件,我想使用CF来加快上传过程(也包括下载,但在这种情况下上传更重要) 最后,我创建了一个简单的JS脚本,将一个文件推送到连接到CF的bucket: var AWS_ACCESS_KEY_ID = "111", AWS_SECRET_ACCESS_KEY = "222", S3_BUCKET = "videos.company.com", S3_

我刚刚配置了一个AmazonCloudFront发行版,并将其连接到现有的AmazonS3存储桶。话虽如此,这个存储桶可以存储10GB到40GB的视频文件,我想使用CF来加快上传过程(也包括下载,但在这种情况下上传更重要)

最后,我创建了一个简单的JS脚本,将一个文件推送到连接到CF的bucket:

var AWS_ACCESS_KEY_ID = "111",
AWS_SECRET_ACCESS_KEY = "222",
S3_BUCKET = "videos.company.com",
S3_KEY = "remote_filename.mkv",
fs = require('fs'),
AWS = require('aws-sdk');

AWS.config.update({accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY});

var startDate = new Date().toUTCString();

var fileStream = fs.createReadStream(__dirname + '/test.mkv');
fileStream.on('error', function (err) {
  if (err) { throw err; }
});  
fileStream.on('open', function () {
  var s3 = new AWS.S3();
  s3.putObject({
    Bucket: S3_BUCKET,
    Key: S3_KEY,
    Body: fileStream
  }, function(err) {
    if (err) {
      console.log(err, err.stack);
    } else {
      console.log('Uploaded file to ' + S3_KEY + ' at ' + new Date().toUTCString());
      console.log("Start time: " + startDate + ", end time: " + new Date().toUTCString());
    }
  }).on('httpUploadProgress', function(progress) {
    console.log('Upload', progress.loaded, 'of' , progress.total, 'bytes' + " --> " + ((progress.loaded*100)/progress.total).toFixed(2) + "%");
  });
});
在运行脚本之后,我没有注意到任何速度变化(使用和不使用CF分发进行上传)。。。实际上,两种情况下的上传时间完全相同。然而,在阅读了一些论坛之后,我看到人们在谈论使用CF url进行POST请求

如何将文件从服务器直接上载到CF


谢谢

我必须说,让操作系统完美运行,我还启用了POST/PUT on CF。我猜亚马逊的连接比你和我都好,所以上传可能受到你上传速度的限制,而不是亚马逊,我认为Cloud Front是你内容的CDN,即下载,而不是上传?你直接上传到S3这里,因此,在S3存储桶前面有CloudFront这一事实与您的上传速度完全无关。你可能想看看这个问题的答案:@adeneo这个问题的标题有误导性。您不能上传到(“到”)CloudFront,但可以通过CloudFront上传,这可以提高返回到源服务器的吞吐量,因为CloudFront edge和源服务器(在本例中为S3)之间的网络经过优化,由AWS控制,并且来自浏览器的TCP会话在CloudFront edge停止,在CloudFront“后面”上游有第二个连接。你的上传倾向于“在互联网上”穿越更少的距离,“在AWS上”穿越更多的距离。你知道如何通过云端上传图像吗?你要一段代码片段吗?