首页 > 解决方案 > 如何通过 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 

标签: c#.netasp.net-web-apiamazon-s3asp.net-web-api2

解决方案


您可以读取所有字节并构造一个内存流:

string fileName = provider.FileData.First().LocalFileName; // assuming you have one file
byte[] fileData = File.ReadAllBytes(fileName);
using (MemoryStream memoryStream = new MemoryStream(fileData))
{

请注意,该字段中允许的最大大小为50kb,因此您可能需要为此添加验证。


推荐阅读