Reactjs/Nodejs/Mongodb:在 img src 中时 Blob url 不起作用

Reactjs/Nodejs/Mongodb : Blob url not working while in img src

提问人:Ujjval76 提问时间:10/19/2023 最后编辑:PreethiUjjval76 更新时间:11/20/2023 访问量:30

问:

当我尝试在前端显示图像时出现此错误

在我的 mern 堆栈项目中,我允许用户上传多个图像并使用 blob 创建上传图像的 URL。使用 MongoDB 来存储这些 URL。现在,当我在前端尝试获取数据并在 img src 标签中使用相同的 blob URL 时,它不起作用。你能告诉我这里有什么问题吗? 或者建议我应该这样做的最佳方式是什么。使用 MongoDB 是这方面的最佳实践吗?

          <Swiper
            onSwiper={setThumbsSwiper}
            spaceBetween={10}
            slidesPerView={6}
            freeMode={true}
            watchSlidesProgress={true}
            modules={[FreeMode, Navigation, Thumbs]}
            className="mySwiper"
          >
            {productDetails.images?.map((imgurl, index) => (
              <SwiperSlide key={index}>
                <img src={imgurl} alt="product-img" />
              </SwiperSlide>
            ))}
          </Swiper>
        </div>

<div className="media-add-files-box">
                            <input
                              type="file"
                              name="images"
                              ref={imageUploadInput}
                              className="image-upload-input"
                              multiple
                              accept="image/png, image/jpeg, image/webp, image/jpg"
                              onChange={handleSelectFile}
                              onChangeCapture={handleAdFormValues("images")}
                            ></input>
                            <button
                              type="button"
                              className="media-add-btn"
                              onClick={triggerImageUploader}
                            >
                              Add photos
                            </button> 

function handleSelectFile(e) {
    const selectedFiles = e.target.files;
    if (!selectedFiles || !selectedFiles[0]) return null;
    setIsImageSelected(true);
    const selectedFilesArray = Array.from(selectedFiles);
    const imagesArray = selectedFilesArray.map((file) => {
      return URL.createObjectURL(file);
    });
    setSelectedImages((previousImages) => previousImages.concat(imagesArray));
    setAdFormValues({
      ...adFormValues,
      images: [...imagesArray],
    });
    console.log(adFormValues.images);
  }
ReactJS 图像 blob src

评论


答:

0赞 SS87 11/20/2023 #1

MDN:URL:createObjectURL()

URL 生存期与它所在的窗口中的文档相关联 创建。新对象 URL 表示指定的 File 对象或 Blob 对象。

您在代码中使用此函数来生成 URL,一旦该特定浏览器会话关闭,这些 URL 将不相关。

处理图像有多种解决方案:将二进制数据直接存储在数据库中,将图像存储在服务器上,然后将 URL 存储在数据库中,或者使用云服务(例如 Cloudinary)来托管文件,并为您提供在代码中引用的 URL。使用哪种解决方案完全取决于项目的范围和需求。

从您的代码中不清楚图像在哪里或如何上传到服务器(您的或外部服务),但如果您只是尝试单独使用上述 blob 函数,那么这将不起作用,因为您实际上并没有将图像存储在该特定浏览器会话中的内存中以外的任何地方。