我正在尝试使用已部署到 AWS API 网关的 C# Web API 通过 Web 表单将 PDF 上传到 S3 存储桶中。
这是我的代码:
private static IAmazonS3 s3Client;
public static async Task<string> UploadS3FileAsync(string bucketName, IFormFile file, string keyName)
{
try
{
s3Client = new AmazonS3Client();
var fileTransferUtility = new TransferUtility(s3Client);
//Upload data from a type of System.IO.Stream.
var stream = file.OpenReadStream();
var length = (int)stream.Length;
byte[] data = new byte[length];
stream.Read(buffer: data, offset: 0, count: length);
var fileTransferUtilityRequest = new TransferUtilityUploadRequest
{
BucketName = bucketName,
InputStream = stream,
StorageClass = S3StorageClass.Standard,
ContentType = "application/pdf",
PartSize = 6291456, // 6 MB.
Key = keyName,
CannedACL = S3CannedACL.NoACL
};
await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
return "success";
}
catch (AmazonS3Exception e)
{
throw e;
//Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
throw e;
//Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
}
当我在本地运行该进程时,这工作得很好,但是当我将 API 部署到网关时,PDF 尽管上传到存储桶中,但已损坏并且比原始文件大。
我尝试过各种方法,例如在 API 网关上设置二进制媒体类型、创建流的各种类型。我确信这与编码有关,但我不确定下一步该去哪里。任何帮助将不胜感激。
这就是为我解决的:
https://github.com/aws/aws-lambda-dotnet/issues/635 https://github.com/aws/aws-lambda-dotnet/issues/635
- 在二进制媒体类型标题下的设置中创建一个条目
multipart/form-data
.
- 使用以下配置创建一个新模型。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "MediaFileUpload",
"type": "object",
"properties": {
"file": { "type": "string" }
}
}
- 修改方法请求步骤,添加在“请求正文”下添加一个条目,使用模型作为内容类型
multipart/form-data
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)