You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda中使用QuestPDF注册许可证时遇只读文件系统异常

解决AWS Lambda(.NET 6)中QuestPDF注册许可证时的只读文件系统异常

问题核心

AWS Lambda的/var/task目录是只读的,新版QuestPDF在初始化或注册许可证过程中,默认尝试向该目录写入gdal_wrap.so文件,触发System.IO.IOException: Read-only file system异常。

解决方案

1. 强制指定QuestPDF使用/tmp临时目录

在Lambda入口函数的初始化阶段,显式设置QuestPDF的临时文件路径为Lambda唯一可写的/tmp目录:

using QuestPDF;

public class Function
{
    public Function()
    {
        // 初始化QuestPDF前设置临时路径
        Settings.TempPath = "/tmp";
        // 执行许可证注册逻辑
        // LicenseManager.RegisterLicense("你的许可证密钥");
    }

    public async Task<string> FunctionHandler(string input, ILambdaContext context)
    {
        // PDF生成逻辑
        return "PDF生成完成";
    }
}

2. 完善Dockerfile依赖配置

确保Dockerfile中完整安装QuestPDF在Linux环境运行所需的依赖,修正原配置的换行问题:

....
WORKDIR /var/task/
COPY --from=publish /app/publish .
COPY --from=build /src/$ARCHIVE_FILE_PATH .
RUN ls -la
RUN yum install -y amazon-linux-extras && \
    amazon-linux-extras install epel -y && \
    yum install -y libgdiplus ca-certificates fontconfig freetype libX11 libXext libXrender && \
    yum clean all

3. 许可证文件(若有)放置到/tmp目录

如果许可证需要读取本地文件,将许可证文件复制到/tmp目录(可通过Dockerfile复制,或Lambda启动时从S3下载至此),注册时指定该路径:

var licensePath = Path.Combine("/tmp", "license.key");
LicenseManager.RegisterLicense(File.ReadAllText(licensePath));

验证

部署修改后的代码至AWS Lambda,执行PDF生成操作,确认异常不再出现,PDF可正常生成。

内容的提问来源于stack exchange,提问作者Renan Carleto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:52:35