如何在 NextJS 中从 /api 创建文件?

2023-12-29

我目前正在尝试创建一个临时文件/api/sendEmail.js with fs.mkdirSync

fs.mkdirSync(path.join(__dirname, "../../public"));

但在 Vercel(部署平台)上,所有文件夹都是只读的,我无法创建任何临时文件。

Error:

"errorMessage": "EROFS: 只读文件系统,mkdir '/var/task/.next/server/public'"

我看到有一些关于此的问题,但不清楚,你们有人设法做到这一点吗?


Vercel 允许在以下位置创建文件/tmp目录。然而,这也有局限性。https://github.com/vercel/vercel/discussions/5320 https://github.com/vercel/vercel/discussions/5320

一个例子/api写入和读取文件的函数是:


import fs from 'fs';

export default async function handler(req, res) {
    const {
      method,
      body,
    } = req

    try {
      switch (method) {
        case 'GET': {
// read
          // This line opens the file as a readable stream
          const readStream = fs.createReadStream('/tmp/text.txt')

          // This will wait until we know the readable stream is actually valid before piping
          readStream.on('open', function () {
            // This just pipes the read stream to the response object (which goes to the client)
            readStream.pipe(res)
          })

          // This catches any errors that happen while creating the readable stream (usually invalid names)
          readStream.on('error', function (err) {
            res.end(err)
          })
          return
        }
        case 'POST':
          // write
          fs.writeFileSync('./test.txt', JSON.stringify(body))
          break
        default:
          res.setHeader('Allow', ['GET', 'POST'])
          res.status(405).end(`Method ${method} Not Allowed`)
      }
      // send result
      return res.status(200).json({ message: 'Success' })
    } catch (error) {
      return res.status(500).json(error)
    }
  }
}

另请参阅:https://vercel.com/support/articles/how-can-i-use-files-in-serverless-functions https://vercel.com/support/articles/how-can-i-use-files-in-serverless-functions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NextJS 中从 /api 创建文件? 的相关文章

随机推荐

  • 我的 Susy 布局中出现奇怪的错位

    我给Susy设置的元素span column mixin to 不服从它 它们稍微错位了 如何实现 HTML 元素的完美对齐 完整网站错位的屏幕截图 Detail
  • 如何清除任何 SSL 证书数据

    我有一个客户端 服务器设置 客户端创建代理以便与服务器通信 当通信协议为 HTTPS 时 代理通过以下行侦听 SSL 证书验证事件 ServicePointManager ServerCertificateValidationCallbac
  • symfony 2:通过防火墙获取非安全页面上当前登录的用户

    如何获取非安全页面上当前登录的用户 我只有一个通过防火墙保护的 account 页面 其他页面不受保护 我的全局导航具有以下模板 简化 if app user a href account data a href a account log
  • 您能更详细地解释一下 PIPE_READMODE_MESSAGE/PIPE_READMODE_BYTE 之间的区别吗?

    虽然我已经浏览过文档here http msdn microsoft com en us library aa365150 28VS 85 29 aspx 它对我来说仍然没有意义 数据以流的形式从管道中读取 的消息 该模式只能 如果 PIP
  • Swift 5 创建 3D 双精度数组并传递给 C 函数

    我需要调用一个传统的 C 函数 来自 swift 它需要一个 3D 双精度数组作为参数 我对 Swift 相当陌生 并且已经开始将为 iOS 和 Mac 编写的大型 ObjC 和 C 代码库转换为 Swift C 代码执行大量复杂的天文数学
  • 除非调用 console.log,否则循环引用父子关系未定义

    请考虑以下代码 var factory function element opts var MutationObserverController function element opts var defaults subtree true
  • 随机网站按钮

    我想这很简单 但我只是找不到完全适合我的问题的答案 我想制作一个按钮 从我给他的列表中打开随机 URL 例如 google youtube 和 facebook 这是我的代码行 现在仅连接到谷歌 IBAction site id sende
  • 点击时切换 UICollectionView Cell 的选择/取消选择状态 - Swift

    首先 我已经在这个问题上坚持了几天 并花了一整天的时间阅读并尝试了 Stack Overflow 上的许多选项 但并没有成功 我想要完成的事情听起来很简单 并且浏览了苹果文档 在我看来它应该可行https developer apple c
  • 在Python中从字符串中搜索字符序列

    我想问是否有什么方法可以从 python 中的较大字符串中查找字符序列 例如 当使用我想找到的网址时www example com from http www example com aaa bbb ccc 如果找到 它应该返回 True
  • .NET:将 EXE 文件嵌入到我的项目中

    我知道这是奇怪的情况 但我需要将 EXE 文件 或汇编代码 嵌入到我的项目中 因此它只能由应用程序启动 它无法在文件系统中创建 EXE 并启动它 是否可以 Edit 它不是 NET EXE 无论如何 我将 Test exe 文件作为资源添加
  • Shell 扩展:未显示在 Windows 资源管理器上下文中

    我有 Windows 7 Professional x64 我的计算机上安装了 Visual Studio 2010 Premium 和 Visual Studio 2012 Premium 我于 2011 年 12 月安装了 TFS Po
  • 更改 RiverPod StateNotifier 状态的属性

    当 StateNotifier 与 Riverpod 一起使用时 每当我们更改状态对象的任何属性时 如何通知状态更改 class UserState String name int age bool isActive bool isLoad
  • 如何删除R中的目录?

    经过一些研究 我发现以下方法有效 unlink mydir 你必须使用recursive如果您想递归删除选项 unlink mydir recursive TRUE 但是 我注意到unlink mydir 独自一人 没有recursive选
  • Ubuntu 18.04 中的正确 PHP 版本中未安装 gRPC 扩展

    我正在尝试按照官方的说明安装 gRPC 扩展guidance https grpc io docs languages php quickstart 我已经遵循了所有步骤 但在最后的步骤中 我得到了这个 我认为稍后会很重要 cd grpc
  • 了解如何在 R 中处理内部 C 函数

    我想知道是否有人可以向我说明 R 如何执行C从控制台提示符下键入的 R 命令进行调用 我特别困惑的是R对 a 函数参数和 b 函数调用本身的处理 让我们举个例子 在这种情况下set seed 想知道它是如何工作的 我在提示符下输入名称 获取
  • 如何在 .Net 中设置单元测试项目?

    您能否分享您在 net 解决方案中设置单元测试项目的方式 我可以想象几种可能的方法 例如 拥有单独的单元测试解决方案 完美反映正在测试的原始代码解决方案的结构 在原始代码解决方案中 有一个解决方案文件夹 您可以在其中完美镜像 每个代码项目都
  • 为 TableView 中的所有单元格设置标签的正确方法

    我正在使用一个里面的按钮tableView其中我得到indexPath row当被按下时 但只有当单元格可以显示在屏幕上而无需scroll 一旦 tableView 可以滚动并且我滚动 uitableview indexPath row返回
  • count(*) 真的很贵吗?

    我有一个页面 其中有 4 个选项卡 显示基于不同表格的 4 个不同报告 我使用以下方法获取每个表的行数select count from table 查询并显示选项卡上每个表中可用的行数 结果 每个页面回发都会导致 5count 要执行的查
  • 在 ItemsControl 中的每个项目周围包裹一些东西

    假设我有不同类的对象的集合 每个类在资源文件中都有其 UserControl DataTemplated 现在我想使用 ItemsControl 来显示集合 但我希望每个项目周围有一个边框或扩展器 我希望这样的事情能够发挥作用
  • 如何在 NextJS 中从 /api 创建文件?

    我目前正在尝试创建一个临时文件 api sendEmail js with fs mkdirSync fs mkdirSync path join dirname public 但在 Vercel 部署平台 上 所有文件夹都是只读的 我无法