<i id='D5U5O'><tr id='D5U5O'><dt id='D5U5O'><q id='D5U5O'><span id='D5U5O'><b id='D5U5O'><form id='D5U5O'><ins id='D5U5O'></ins><ul id='D5U5O'></ul><sub id='D5U5O'></sub></form><legend id='D5U5O'></legend><bdo id='D5U5O'><pre id='D5U5O'><center id='D5U5O'></center></pre></bdo></b><th id='D5U5O'></th></span></q></dt></tr></i><div id='D5U5O'><tfoot id='D5U5O'></tfoot><dl id='D5U5O'><fieldset id='D5U5O'></fieldset></dl></div>
  • <small id='D5U5O'></small><noframes id='D5U5O'>

    <tfoot id='D5U5O'></tfoot>

      • <bdo id='D5U5O'></bdo><ul id='D5U5O'></ul>

      1. <legend id='D5U5O'><style id='D5U5O'><dir id='D5U5O'><q id='D5U5O'></q></dir></style></legend>

        如何在 JavaScript 中创建文件对象的修改副本?

        时间:2023-10-02

          <bdo id='SOqMw'></bdo><ul id='SOqMw'></ul>
        • <legend id='SOqMw'><style id='SOqMw'><dir id='SOqMw'><q id='SOqMw'></q></dir></style></legend>
        • <tfoot id='SOqMw'></tfoot>
        • <small id='SOqMw'></small><noframes id='SOqMw'>

          <i id='SOqMw'><tr id='SOqMw'><dt id='SOqMw'><q id='SOqMw'><span id='SOqMw'><b id='SOqMw'><form id='SOqMw'><ins id='SOqMw'></ins><ul id='SOqMw'></ul><sub id='SOqMw'></sub></form><legend id='SOqMw'></legend><bdo id='SOqMw'><pre id='SOqMw'><center id='SOqMw'></center></pre></bdo></b><th id='SOqMw'></th></span></q></dt></tr></i><div id='SOqMw'><tfoot id='SOqMw'></tfoot><dl id='SOqMw'><fieldset id='SOqMw'></fieldset></dl></div>
            <tbody id='SOqMw'></tbody>

                  本文介绍了如何在 JavaScript 中创建文件对象的修改副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  <input type="file"> 接收的文件的属性是只读的.

                  Properties of files received from an <input type="file"> are read-only.

                  例如,以下重写 file.name 的尝试要么静默失败,要么抛出 TypeError: Cannot assign to read only property 'name' of object '#<File>'.

                  For example, the following attempt to re-write file.name would either fail silently or throw TypeError: Cannot assign to read only property 'name' of object '#<File>'.

                  <input onchange="onchange" type="file">
                  

                  onchange = (event) => {
                      const file = event.target.files[0];
                      file.name = 'foo';
                  }
                  

                  尝试通过 Object.assign({}, file) 创建副本失败(创建一个空对象).

                  Attempting to create a copy via Object.assign({}, file) fails (creates an empty object).

                  那么如何克隆一个 File 对象呢?

                  So how does one clone a File object?

                  推荐答案

                  我的解决方案在于 File 构造函数:

                  My solution lay in the File constructor:

                  https://developer.mozilla.org/en-US/docs/Web/API/File#Implementation_notes

                  它本身就是Blob的扩展:

                  https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

                  let file = event.target.files[0];
                  if (this.props.distro) {
                      const name = 'new-name-here' + // Concat with file extension.
                          file.name.substring(file.name.lastIndexOf('.'));
                      // Instantiate copy of file, giving it new name.
                      file = new File([file], name, { type: file.type });
                  }
                  

                  注意 File() 的第一个参数必须是一个数组,而不仅仅是原始文件.

                  Note the first argument to File() must be an array, not simply the original file.

                  这篇关于如何在 JavaScript 中创建文件对象的修改副本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  <legend id='2sbUZ'><style id='2sbUZ'><dir id='2sbUZ'><q id='2sbUZ'></q></dir></style></legend>
                  • <bdo id='2sbUZ'></bdo><ul id='2sbUZ'></ul>

                  • <tfoot id='2sbUZ'></tfoot>

                      • <small id='2sbUZ'></small><noframes id='2sbUZ'>

                          <i id='2sbUZ'><tr id='2sbUZ'><dt id='2sbUZ'><q id='2sbUZ'><span id='2sbUZ'><b id='2sbUZ'><form id='2sbUZ'><ins id='2sbUZ'></ins><ul id='2sbUZ'></ul><sub id='2sbUZ'></sub></form><legend id='2sbUZ'></legend><bdo id='2sbUZ'><pre id='2sbUZ'><center id='2sbUZ'></center></pre></bdo></b><th id='2sbUZ'></th></span></q></dt></tr></i><div id='2sbUZ'><tfoot id='2sbUZ'></tfoot><dl id='2sbUZ'><fieldset id='2sbUZ'></fieldset></dl></div>
                            <tbody id='2sbUZ'></tbody>