将HTML文件上传到AWS S3,然后将其提供而不是下载

4

我正在使用以下代码下载网页并将其写入名为thisArticle.html的文件中,该代码如下。

var file = fs.createWriteStream("thisArticle.html"); 
var request = http.get(req.body.url, response => response.pipe(file) );

接下来我尝试读取文件并上传到S3,这是我编写的代码:

fs.readFile('thisArticle.html', 'utf8', function(err, html){

  if (err) { 
    console.log(err + "");
    throw err; 
  }

  var pathToSave = 'articles/ ' + req.body.title +'.html';

  var s3bucket = new AWS.S3({ params: { Bucket: 'all-articles' } });

  s3bucket.createBucket(function () {
    var params = {
      Key: pathToSave,
      Body: html,
      ACL: 'public-read'
    };

    s3bucket.upload(params, function (err, data) {

      fs.unlink("thisArticle.html", function (err) {
        console.error(err);
      });

      if (err) {
        console.log('ERROR MSG: ', err);
        res.status(500).send(err);
      } else { 
        console.log(data.Location);
      }

      // ..., more code below

    });

  });

});

现在,我面临两个问题:

文件正在上传,但是大小为0字节(空白) 当我尝试通过S3仪表板手动上传时,它成功上传,但是当我尝试在浏览器中加载URL时,它下载HTML文件而不是提供其服务。 如果我漏掉了一些东西,请给我一些指导?

2个回答

10

将ContentType设置为"text/html"。

s3 = boto3.client("s3")
s3.put_object(
        Bucket=s3_bucket,
        Key=s3_key,
        Body=html_string,
        CacheControl="max-age=0,no-cache,no-store,must-revalidate",
        ContentType="text/html",
        ACL="public-read"
    )

0

我已经注释掉了fs.unlink,但它仍然以0字节的形式出现。@michael-j - ah92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接