c# - 如何通过 ASP.Net Web API 通过 Memory Stream 将文件读取到 S3
问题描述
我想将文件作为内存流读取并将其发送到 s3 存储桶。下面是一个工作片段,它有两个部分。
第 1 部分:获取文件并将其上传到本地目录
第 2 部分:获取文本并将其上传到 s3 存储桶。
但我想将文件上传到 s3 存储桶而不是 text。
下面是代码片段:
[httppost]
public async void Upload()
{
// Part 1:
// LOGIC TO UPLOAD FILE TO A LOCAL LOCATION
var fileuploadPath = ConfigurationManager.AppSettings["FileUploadLocation"]; // some local path
var provider = new MultipartFormDataStreamProvider(fileuploadPath);
var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));
foreach (var header in Request.Content.Headers)
{
content.Headers.TryAddWithoutValidation(header.Key, header.Value);
}
await content.ReadAsMultipartAsync(provider);
// Part 2:
// LOGIC TO WRITE DATA TO s3 Bucket via Amazon Kinesis
byte[] dataAsBytes = Encoding.UTF8.GetBytes("My Test Data for s3 bucket");
using (MemoryStream memoryStream = new MemoryStream(dataAsBytes))
{
Amazon.KinesisFirehose.Model.PutRecordRequest putRecord = new Amazon.KinesisFirehose.Model.PutRecordRequest();
putRecord.DeliveryStreamName = myStreamName;
Record record = new Record();
record.Data = memoryStream; // I WANT TO PUT FILE CONTENT HERE
putRecord.Record = record;
await kinesisClient.PutRecordAsync(putRecord);
}
}
在上面的代码片段中,我想将正在上传的文件发送到 s3 存储桶。
伪代码:
Current Code
byte[] dataAsBytes = Encoding.UTF8.GetBytes("My Test Data for s3 bucket");
What I want
byte[] dataAsByte = Data should be read from the file
解决方案
您可以读取所有字节并构造一个内存流:
string fileName = provider.FileData.First().LocalFileName; // assuming you have one file
byte[] fileData = File.ReadAllBytes(fileName);
using (MemoryStream memoryStream = new MemoryStream(fileData))
{
请注意,该字段中允许的最大大小为50kb,因此您可能需要为此添加验证。
推荐阅读
- audio - 直接从音频数据流语音到文本而不保存到 (.wav) 文件
- java - 如何从每个逗号分隔行中读取前两个单词和后两个单词?
- flutter - 使用颤振时 Azure Devops 中出现奇怪的构建错误
- python - 正确匹配html解析后正确转义循环
- javascript - 只刷新一个部分(不是整个页面)
- php - Laravel PHPUNIT 你如何测试查询请求
- ssrs-2008 - SSRS 表达式在行和列中拆分字符串
- php - 附加用户实体时,用户名的 UniqueEntity 不起作用
- bookdown - bookdown 定理中的 Latex 宏
- elasticsearch - ElasticSearch 仅返回文档的特定部分