当前位置: 首页 > 知识库问答 >
问题:

HEIC文件与FilePond一起使用?

洪育
2023-03-14

我正在尝试用文件键上传一个HEIC文件。我应该指定哪种文件类型?

现在我有这个:

  accepted-file-types="image/jpeg, image/png, image/gif, image/jpg"

我在文件里找不到任何关于这个的东西,我的实验也不起作用。

下面是我试图上传的测试文件:

https://github.com/tigranbs/test-heic-images/raw/master/image1.heic

共有1个答案

徐昕
2023-03-14

感谢@rik提供的指针。下面是一些使用VUE中的filepond完成此操作的代码。感觉有点怪怪的,但做的很好。

接受Image/HEIC内容类型并添加自定义验证器:

<file-pond
  v-if="supported"
  ref="pond"
  name="photo"
  :allow-multiple="multiple"
  accepted-file-types="image/jpeg, image/png, image/gif, image/jpg, image/heic"
  :file-validate-type-detect-type="validateType"
  :files="myFiles"
  image-resize-target-width="800"
  image-resize-target-height="800"
  image-crop-aspect-ratio="1"
  label-idle="Drag & Drop photos or <span class=&quot;btn btn-white ction&quot;> Browse </span>"
  :server="{ process, revert, restore, load, fetch }"
  @init="photoInit"
  @processfile="processed"
  @processfiles="allProcessed"
/>

然后在验证器中检查文件名,以处理未设置正确MIME类型的浏览器:

validateType(source, type) {
  const p = new Promise((resolve, reject) => {
    if (source.name.toLowerCase().indexOf('.heic') !== -1) {
      resolve('image/heic')
    } else {
      resolve(type)
    }
  })

  return p
}

然后在进程回调中,找到HEIC文件,并使用heic2any将其转换为PNG,并在上载中使用该数据。

async process(fieldName, file, metadata, load, error, progress, abort) {
  await this.$store.dispatch('compose/setUploading', true)

  const data = new FormData()
  const fn = file.name.toLowerCase()

  if (fn.indexOf('.heic') !== -1) {
    const blob = file.slice(0, file.size, 'image/heic')
    const png = await heic2any({ blob })
    data.append('photo', png, 'photo')
  } else {
    data.append('photo', file, 'photo')
  }

  data.append(this.imgflag, true)
  data.append('imgtype', this.imgtype)
  data.append('ocr', this.ocr)
  data.append('identify', this.identify)

  if (this.msgid) {
    data.append('msgid', this.msgid)
  } else if (this.groupid) {
    data.append('groupid', this.groupid)
  }

  const ret = await this.$axios.post(process.env.API + '/image', data, {
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    onUpLoadProgress: e => {
      progress(e.lengthComputable, e.loaded, e.total)
    }
  })

  if (ret.status === 200 && ret.data.ret === 0) {
    this.imageid = ret.data.id
    this.imagethumb = ret.data.paththumb
    this.image = ret.data.path

    if (this.ocr) {
      this.ocred = ret.data.ocr
    }

    if (this.identify) {
      this.identified = ret.data.items
    }

    load(ret.data.id)
  } else {
    error(
      ret.status === 200 ? ret.data.status : 'Network error ' + ret.status
    )
  }

  return {
    abort: () => {
      // We don't need to do anything - the server will tidy up hanging images.
      abort()
    }
  }
},

然后,服务器很高兴地没有意识到原始文件是HEIC的,一切都正常进行。

 类似资料:
  • 我有一个问题和一个关于文件绑定的问题。 我目前正在结合使用Doka和FilePond,并且想要加载一个初始图像,我通过添加了该图像。files:[]带有文件所在服务器的url。 文件加载工作正常,除了一件事: 我正在使用文件类型验证,如果我正在使用url加载初始文件,那么文件类型将始终是text/html,这将导致无法加载图像,并且我无法使用doka更改它。 如果我将text/html添加到文件类

  • 问题内容: 好的,我一直在遇到aws或某些问题,以至于我似乎无法使mod_rewrite正常工作。 仅出于测试目的,我做了以下工作: 1使用AWS控制台从向导部署新的AMI 64位实例 2百胜装的apache 3编辑了/etc/httpd/conf/httpd.conf: 好像 4确保 在文件中且未注释。 5重启apache: 6创建了两个新文件: 包含: 包含: 7.创建文件: 包含(共TOTA

  • 问题内容: 如何在fileinputstream中输入要发送的文件? 我在Fileinputstream中输入了url,但是URL的输出是错误的,因为链接斜杠像-从/到\一样向后翻转,而双斜杠//只能是一个斜杠和一个反斜杠。要执行fileinputstream吗?如果不是,您能告诉我应该使用什么代替fileinputstream吗? 问题答案: 如果您要获取从URL检索数据的,则使用方法将返回,可

  • 属性文件如何与Apache Camel一起使用,以引用可配置的属性。例如,如果有从文件夹读取文件的路由,那么如何在属性文件中配置该文件夹位置。我正在使用JavaDSL。

  • FilePond 是一个 JavaScript 文件上传库,可以上传任何内容,并能够优化图像以加快上传速度,同时提供顺畅的用户体验。 FilePond 适配器可用于 React、Vue,Angular 和 jQuery,压缩包大小仅为 21 KB。 特性: 接受目录、文件、blob、本地 URL、远程 URL 和数据 URI。 可删除文件、选择文件系统、复制和粘贴文件,或使用 API​​ 添加文件

  • TranslationFoldingBuilder.kt 我的问题是,对于Kotlin文件,根本没有调用buildFoldRegions()。