我正在尝试创建个人资料图片上传功能,但卡在了检索部分。图像被分块下载,并且由于某种原因而被渲染后,“网络”选项卡中的图像旁边仍会旋转图标60秒,这就像图像已下载并渲染一样,但仍需要大约一分钟或更长的时间使其完成加载到浏览器的“网络”标签中,并且如果我尝试同时上传另一张图片,则该图片要等到之前上传的图片经过那一分钟左右后才能呈现,有人可以帮我解决这个问题请。

const storage = require('@google-cloud/storage');

const gcs = storage({
    projectId: 'my_project_id',
    keyFilename: 'keys.json'
});

const bucketName = 'my-profile-photos';
const bucket = gcs.bucket(bucketName);

const retrieveFromGcs = (req, res, next) => {
  const stream = bucket.file(req.params.name).createReadStream();

  res.writeHead(200, {'Content-Type': 'image/jpg' });

  stream.on('data', (data) => {
    console.log('hit stream on data');
    res.write(data);
  });

  stream.on('error', (err) => {
    console.log('hit error');
    next(err);
  });

  stream.on('finish', () => {
    console.log('hit finish');
    stream.end();
});


//如果console.logs对任何人都有用,则“命中数据流”将被打印大约200次,而“命中完成”将被打印一次

最佳答案

在这里,当您完成流式传输时,您必须结束资源。

为此使用下面的代码

stream.on('finish', () => {
    console.log('hit finish');
    stream.end();
    res.end();
});


完成网络加载程序。我们必须结束我们的响应对象。这样浏览器就知道现在没有数据可写。

07-24 18:42
查看更多