{"record":{"id":"fa6b209af4006de2","repo":"gatsbyjs/gatsby","slug":"the-asset-with-id-id-has-a-file-but-the-file-c","errorCode":null,"errorMessage":"The asset with id: ${id} has a file but the file contains no url.","messagePattern":"The asset with id: (.+?) has a file but the file contains no url\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/gatsby-source-contentful/src/download-contentful-assets.js","lineNumber":62,"sourceCode":"\n  const bar = reporter.createProgress(\n    `Downloading Contentful Assets`,\n    assetNodes.length\n  )\n  bar.start()\n  await distributeWorkload(\n    assetNodes.map(node => async () => {\n      let fileNodeID\n      const { contentful_id: id, node_locale: locale } = node\n      const remoteDataCacheKey = `contentful-asset-${id}-${locale}`\n      const cacheRemoteData = await cache.get(remoteDataCacheKey)\n      if (!node.file) {\n        reporter.log(id, locale)\n        reporter.warn(`The asset with id: ${id}, contains no file.`)\n        return Promise.resolve()\n      }\n      if (!node.file.url) {\n        reporter.warn(\n          `The asset with id: ${id} has a file but the file contains no url.`\n        )\n        return Promise.resolve()\n      }\n      const url = createUrl(node.file.url)\n\n      // Avoid downloading the asset again if it's been cached\n      // Note: Contentful Assets do not provide useful metadata\n      // to compare a modified asset to a cached version?\n      if (cacheRemoteData) {\n        fileNodeID = cacheRemoteData.fileNodeID // eslint-disable-line prefer-destructuring\n        touchNode(getNode(cacheRemoteData.fileNodeID))\n      }\n\n      // If we don't have cached data, download the file\n      if (!fileNodeID) {\n        const fileNode = await createRemoteFileNode({\n          url,","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/gatsbyjs/gatsby/blob/e85d62f1779e353eaac1753211629a26d123e26c/packages/gatsby-source-contentful/src/download-contentful-assets.js#L44-L80","documentation":"Data-quality warning while downloading Contentful assets: the asset node has a `file` object but its `url` field is falsy, so there is nothing to fetch. The asset is skipped (its fileNodeID stays unset and no local file node is created); other assets continue downloading.","triggerScenarios":"Thrown at packages/gatsby-source-contentful/src/download-contentful-assets.js:62 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-upload/re-publish the asset in Contentful so file.url is populated","Re-run sourceNodes to re-sync the asset"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e85d62f1779e353eaac1753211629a26d123e26c","analyzedAt":"2026-08-26T17:50:09.662Z","contentChangedAt":"2026-08-26T17:50:09.662Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}