-1

我不擅长 javascript。我正在尝试通过修改此示例将一些文件作为文件夹上传到 nft.storage -> https://github.com/nftstorage/nft.storage/blob/main/packages/client/examples/node.js/ storeDirectory.js

我的文件不是通过表单上传,而是存储在我的 PC 文件系统中。下面是我的js代码。

<script type="module">
  import { NFTStorage, File } from 'https://cdn.skypack.dev/nft.storage'
  import { fs } from 'https://cdn.skypack.dev/fs-'

  const endpoint = 'https://api.nft.storage' // the default
  const token = 'RDA0NjI0MTIzMTA2Mzgy....' // your API key from https://nft.storage/manage

  function log(msg) {
    msg = JSON.stringify(msg, null, 2)
    document.getElementById('out').innerHTML += `${msg}\n`
  }

  document.querySelector('#upload-file-ipfs').addEventListener('click', async (e) => {
    e.preventDefault()
    
    const storage = new NFTStorage({ endpoint, token })
    const cid = await storage.storeDirectory([
        new File([await fs.promises.readFile('metadata.json')], 'metadata.json'),
        new File([await fs.promises.readFile('test.png')], 'test.png'),
    ])
    console.log({ cid })
    const status = await storage.status(cid)
    console.log(status)
  })
</script>

但是我在下面不断收到此错误。

Uncaught SyntaxError: The requested module 'https://cdn.skypack.dev/fs-' does not provide an export named 'fs'

我尝试用“https://www.skypack.dev/view/fs-extra”和“https://cdn.skypack.dev/graceful-”替换“https://cdn.skypack.dev/fs-” fs',它给了我同样的错误。

如果我删除'fs'周围的花括号,我会得到Uncaught Error: [Package Error] "fs" does not exist. (Imported by "fs-").

非常感谢任何帮助。我的应用程序是 PHP+ JS,而不是 node.js。

4

1 回答 1

0

它应该没有花括号,如docs 中fs-所示,但第二个错误告诉您下一个问题:您正在尝试在浏览器中使用为 node.js 设计的包。(浏览器没有本机fs模块。)在后端 node.js 应用程序中使用它,而不是前端。

由于您似乎试图在浏览器中使用它,因此您可能不应该使用您链接的 node.js 示例(nft.storage/packages/client/examples/node.js/storeDirectory.js ,而应该使用浏览器示例https ://github.com/nftstorage/nft.storage/blob/main/packages/client/examples/browser

但是请记住,浏览器中的脚本不能只从用户的文件系统中读取随机文件。用户必须以表单形式上传文件(或使用浏览器文件系统 API 授予对某个目录的访问权限,但这是实验性的)。

于 2021-11-15T22:55:04.530 回答