来自 Image 的 Chromium createObjectUrl 显示为 net::ERR_FILE_NOT_FOUND

Chromium createObjectUrl from Image comes out as net::ERR_FILE_NOT_FOUND

我知道我的代码可以工作,因为我一直在 firefox 中使用它。当我切换到 chrome 时,由于 chrome 无法读取 URL.createObjectURL() 生成的 url,此代码片段已停止工作。

export const image_preview = () => {
  $('.js-thumbnail').off()
  $('.js-thumbnail').on('change', function(event) {
    // add event to each file input
    const img = $(this).siblings('img')
    const url = URL.createObjectURL(event.target.files[0]) // url to user's image
    img.attr('src', url)
    URL.revokeObjectURL(url) // free the allocated object
  })
}

url 本身已生成,但 chromium 无法将其加载到我的图像标签中。

一些 posts 建议使用 webkitURL api 而不是 URL 但这也不起作用。你知道原因吗?这在其他浏览器中也是一个问题吗?

您需要等待图像加载完毕才能撤销其 URL。

图像资源在我们设置它们的 src 之后开始在微任务中加载(除了其他原因允许在我们设置 src 之后设置 crossOrigin 属性),所以当浏览器将读取 src 更改,行 URL.revokeObjectURL(url) 已经被调用,并且 blob:// URL 已经指向任何地方。

就这么简单

    const img = $(this).siblings('img')
    const url = URL.createObjectURL(event.target.files[0]) // url to user's image
    img.attr('src', url)
    img.one('load', (e) => { URL.revokeObjectURL(url); });