未处理的拒绝(错误):给定的文件不是图像

发布于 2025-01-11 05:31:04 字数 1686 浏览 0 评论 0 原文

  • 这里我在react js中使用formik上传文件

  • 上传文件时,它的大小验证有效,但类型验证不起作用

  • 这是我的代码 如果有人能帮助我,那对我来说真的很有帮助

     const SUPPORTED_FORMATS = ["image/jpg", "image/jpeg","image/png"];
    
    const onFileChange = async (文件) => { 
     const 选项 = {maxSizeMB: 1, maxWidthOrHeight: 500, useWebWorker: true} 
    
     constcompressedFile =等待imageCompression(文件,选项)
       console.log(`------- 压缩文件大小 ${compressedFile.size / 1024} KB -------`)
    
       var formData = new FormData()
       formData.append('文件', 压缩文件)
       var url = URL.BASE + URL.STORAGE_UPLOAD + 'profileImage'
      var result = wait post(url, formData, '多部分/表单数据')
    
      if (result.is_success === false) {
          addNotification(result.error_message, '危险');
        }
    
       别的{      
       var url= reader.readAsDataURL(文件)
       reader.readAsDataURL(文件)
    
        reader.onloadend = 函数 (e) {
        setSelectedImgUrl(reader.result);
          setProfileImage(结果.数据.文件名);    
       }
       .bind(这个)
    } }
    
    
    
      profileImgUrl: 是的
             .mixed()
            .nu​​llable() 
            .notRequired()      
             。测试(
                     “文件大小”,
                     requiredMessages.file_size_validation,
                      (文件)=> !文件 || (文件 && file.size <= 2000000)
                  )      
             。测试(
                     “文件格式”,
                     requiredMessages.file_type_validation,
                     (文件)=> !文件 || (文件 && SUPPORTED_FORMATS.includes(file.type))
                 ),
    
    
    
      `
    
  • here i am upload a file using formik in react js

  • When the file is upload it's size validation works but type validation not work

  • Here is my code
    If anyone can help me so it's really helpful to me

     const SUPPORTED_FORMATS = ["image/jpg", "image/jpeg","image/png"];
    
    const onFileChange = async (file) => { 
     const options = {maxSizeMB: 1, maxWidthOrHeight: 500, useWebWorker: true} 
    
     const compressedFile =await imageCompression(file, options)
       console.log(`------- Compressed File Size ${compressedFile.size / 1024} KB -------`)
    
       var formData = new FormData()
       formData.append('file', compressedFile)
       var url = URL.BASE + URL.STORAGE_UPLOAD + 'profileImage'
      var result = await post(url, formData, 'multipart/form-data')
    
      if (result.is_success === false) {
          addNotification(result.error_message, 'danger');
        }
    
       else{      
       var url= reader.readAsDataURL(file)
       reader.readAsDataURL(file)
    
        reader.onloadend = function (e) {
        setSelectedImgUrl(reader.result);
          setProfileImage(result.data.fileName);    
       }
       .bind(this)
    } }
    
    
    
      profileImgUrl: Yup
             .mixed()
            .nullable() 
            .notRequired()      
             .test(
                     "filesize",
                     requiredMessages.file_size_validation,
                      (file) => !file || (file && file.size <= 2000000)
                  )      
             .test(
                     "fileformat",
                     requiredMessages.file_type_validation,
                     (file) => !file || (file && SUPPORTED_FORMATS.includes(file.type))
                 ),
    
    
    
      <input className="fileInput hidden" type="file"  name="profileImgUrl"  id="profileImgUrl" accept="image/*  onBlur={handleBlur} onChange={(event) => { setFieldValue("profileImgUrl",event.target.files[0])onFileChange(event.target.files[0])}}/>`
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凌乱心跳 2025-01-18 05:31:05

您可以在选项声明中设置最大大小。您没有设置允许的类型。

 const options = {maxSizeMB: 1, maxWidthOrHeight: 500, useWebWorker: true} 

试试这个(会仔细检查它是 .jpg 还是 jpg,因为我不记得语法了):

const filesFormats = [".jpg", ".gif"];
const isRightFormat = filesFormats.includes(file.type);

You set the Max Size on the options declaration. You did not set the allowed Types.

 const options = {maxSizeMB: 1, maxWidthOrHeight: 500, useWebWorker: true} 

Try this (would double check if it's .jpg or jpg as I can't recall the syntax):

const filesFormats = [".jpg", ".gif"];
const isRightFormat = filesFormats.includes(file.type);
当爱已成负担 2025-01-18 05:31:05

就我而言,解决方案是将 File.type 显式设置为“image/jpeg”

Code example

In my case, the solution was to explicitly set File.type to "image/jpeg"

Code example

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文