IRONSOFTWAREHOME

如何在 AWS Lambda 上读取和写入二维码

Curtis Chau
Curtis Chau
Updated: 2026年4月22日

本文提供了使用 IronQR 设置 AWS Lambda 函数的详细指南。 在本教程中,您将学习如何配置 IronQR,以便直接向 S3 存储桶读取和写入二维码。

安装

本文将使用 S3 存储桶,因此需要 AWSSDK.S3 包。

Start using IronQR in your project today with a free trial.

第一步:
arrow pointer

创建 AWS Lambda 项目

using Visual Studio 创建容器化的 AWS Lambda 是一个简单的过程:

  • 安装 AWS Toolkit for Visual Studio
  • 选择 'AWS Lambda Project (.NET Core - C#)'
  • 选择 '.NET 8 (Container Image)' 蓝图,然后选择 '完成'。

选择容器镜像

添加包依赖项

.NET 8 中的 IronQR 库可在 AWS Lambda 上运行,无需额外的依赖项。 要进行配置,请按如下所示修改项目的 Dockerfile:

FROM public.ecr.aws/lambda/dotnet:8

# Install necessary packages and update repositories
RUN dnf update -y

WORKDIR /var/task

# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. 
# The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built 
# with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
# will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
# set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
#
# Alternatively, Docker multi-stage build could be used to build the .NET Lambda project inside the image.
# For more information on this approach, check out the project's README.md file.
COPY "bin/Release/lambda-publish"  .
Text

修改 FunctionHandler 代码

本示例生成一个二维码,将其上传到 S3 存储桶,并读取新生成的二维码。

文件路径在 IronQrNuGet 目录中指定,文件名使用全局唯一标识符 (GUID)。 Write 方法根据提供的值生成QR码,然后将生成的JPG字节数组传递给 Read 方法以读取QR码。 这证明该 AWS Lambda 函数能够读取二维码。

using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronQr;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace IronQrNuGetAwsLambda
{
    public class Function
    {
        private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

        /// <summary>
        /// Main handler for AWS Lambda
        /// </summary>
        /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        /// <returns></returns>
        public async Task FunctionHandler(ILambdaContext context)
        {
            // Set the license key for IronQR
            IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01";

            string bucketName = "deploymenttestbucket";
            string objectKey = $"IronQrNuGet/{Guid.NewGuid()}.png";

            try
            {
                // Create a QR code with the content "12345"
                var myQr = QrWriter.Write("12345");

                context.Logger.LogLine("QR created.");

                // Upload the JPG to S3
                await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg());

                context.Logger.LogLine($"QR uploaded successfully to {bucketName}/{objectKey}");

                // Read the QR code
                QrImageInput imageInput = new QrImageInput(myQr.Save());
                QrReader reader = new QrReader();
                var resultFromByte = reader.Read(imageInput);

                foreach (var item in resultFromByte)
                {
                    // Log the read value
                    context.Logger.LogLine($"QR value is = {item.Value}");
                }
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
            }
        }

        // Function to upload the JPG file to S3
        private async Task UploadJpgToS3Async(string bucketName, string objectKey, byte[] jpgBytes)
        {
            using (var memoryStream = new MemoryStream(jpgBytes))
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    InputStream = memoryStream,
                    ContentType = "image/jpg",
                };

                await _s3Client.PutObjectAsync(request);
            }
        }
    }
}

增加内存和超时

Lambda 函数的内存分配取决于文档的大小和同时处理的文档数量。 作为起点,请在 aws-lambda-tools-defaults.json 中将内存设置为512 MB,并将超时设置为300秒。

"function-memory-size" : 512,
"function-timeout" : 300
JSON

如果内存不足,程序将引发错误:"运行时错误退出:信号:终止"。增加内存大小可以帮助解决此问题。 如需进一步指导,请查看故障排除文章: AWS Lambda - 运行时退出信号:已终止

发布

要在 Visual Studio 中发布,只需右键单击项目,然后选择"发布到 AWS Lambda..." 然后,配置所需的设置。 如需了解更多信息,请访问AWS 网站

试一试!

您可以通过 Lambda 控制台 或通过 Visual Studio 激活 Lambda 函数。

常见问题解答

如何将 QR 码库集成到我的 AWS Lambda C# 项目中?

您可以通过下载 IronQR 库、使用 Visual Studio 创建一个容器化的 AWS Lambda 项目并配置您的环境来支持 QR 码操作,将 QR 码库如 IronQR 集成到您的 C# 项目中。

配置 IronQR 以用于 AWS Lambda 的步骤有哪些?

通过在 Visual Studio 中设置容器化项目模板、修改 Dockerfile、更新 FunctionHandler 以及调整内存和超时设置来配置 IronQR 用于 AWS Lambda,以确保顺利运行。

如何使用 AWS S3 通过 C# 库管理 QR 码?

using IronQR 可以通过创建、上传到 AWS S3 存储桶并从中读取来管理 QR 码。这涉及到与 AWSSDK.S3 包结合利用 IronQR 库处理 S3 存储桶的操作。

如果我的 AWS Lambda 函数使用 IronQR 性能不佳,我该怎么办?

如果您的 AWS Lambda 函数性能不佳,请考虑在 aws-lambda-tools-defaults.json 文件中增加内存和超时设置,以为该功能分配更多资源。

如何将 C# Lambda 函数部署到 AWS?

通过使用 Visual Studio 的“发布到 AWS Lambda...”选项,配置必要的设置,并利用 AWS Toolkit 执行部署,将 C# Lambda 函数部署到 AWS。

是否可以在 Visual Studio 中测试我的 AWS Lambda 功能?

是的,您可以使用 AWS Toolkit 直接在开发环境中调用函数并验证输出,在 Visual Studio 中测试您的 AWS Lambda 功能。

如何解决我的 AWS Lambda 功能的内存问题?

要解决内存问题,请增加在 aws-lambda-tools-defaults.json 文件中的功能内存分配,并在重新部署后监控功能的性能。

修改 AWS Lambda 项目中的 Dockerfile 有什么重要性?

在 AWS Lambda 项目中修改 Dockerfile 对于正确地设置环境至关重要,包括更新存储库和复制必要的构建工件以使功能正常执行。

如何确保我的 AWS Lambda 功能有效地处理 QR 码操作?

通过优化内存和超时设置,使用适当的库如 IronQR,并正确配置 Dockerfile 和项目设置,确保您的 AWS Lambda 功能有效地处理 QR 码操作。

我可以在 AWS Lambda 中自动化 QR 码的生成和检索吗?

是的,您可以使用 IronQR 在 AWS Lambda 中自动化 QR 码的生成和检索。该库允许您以编程方式创建 QR 码,将其上传到 S3,并根据需要进行读取。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

Nuget Downloads 74,386版本:2026.9刚刚发布

立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronQR
nuget.org/packages/IronQR/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索“IronQR”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

  1. 下载并解压IronQR到您的解决方案目录中的~/Libs等位置
  2. 在Visual Studio解决方案资源管理器中,右键单击引用。选择浏览,“IronQR.dll”

许可证从$999开始

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户