使用LiipImagineBundle时如何处理获取JavaScript中尚不存在的图像

时间:2019-05-06 15:47:33

标签: javascript node.js symfony liipimaginebundle

我想检查NodeJS中是否存在文件。

我在另一篇文章中看到了这个解决方案:

const tryRequire = (path) => {
  try {
   return require(`${path}`);
  } catch (err) {
   return null;
  }
};

但这真的是一个很好的解决方案吗?

就我而言,我正在检查很多文件,因此我将导入需要检查的每个文件(很多文件)。我只想知道文件是否存在,并且不导入它。

我该怎么办?


编辑:

我正在详细解释我的问题。

我正在一个Symfony and React项目中。 我是React的新手。

可以在聊天中上传图像。上传图片时,我将其称为Symfony路线。在此路由中,我使用Liip Imagine捆绑包。所以我正在做这样的事情来缓存图像:

public function new(Request $request, SerializerInterface $serializer): Response
{
    $rewardImagePath = $this->uploaderHelper->asset($media, 'imageFile');
        if($rewardImagePath) {
            $cacheImagePath = $this->cacheManager->getBrowserPath($rewardImagePath, 'live_feed_message');
        }
}

问题是getBrowserPath函数为我提供了未来缓存文件的URL。但是创建文件需要花费大量时间(有时需要5/10秒)。所以在我前面,我有新的聊天消息,但实际上,服务器上不存在关联的文件。因此它会显示一条没有图像的消息。

由于某些未知原因,如果我正在执行此控制器中的一会儿文件,则会超时,并且永远不会创建该文件。这就是为什么我要在React端检查文件是否存在。

1 个答案:

答案 0 :(得分:-1)

您可以尝试:

function doesFileExist(urlToFile) {
var xhr = new XMLHttpRequest();
xhr.open('HEAD', urlToFile, false);
xhr.send();

if (xhr.status == "404") {
    return false;
} else {
    return true;
}
}