Я пытаюсь сохранить данные в формате json в s3, но без сохранения файла на диске вообще.
Я получил его, чтобы создать строку с помощью Streamwriter.затем я использую https://github.com/icsharpcode/SharpZipLib, чтобы сжать массив байтов, а затем загрузить его в aws s3.проблема в том, что если я смотрю на файл на s3, я вижу его как filename.json.gz, что правильно, но когда я скачиваю его, он скачивает его как filename.zip по какой-то причине
здесьмой код:
public UploadToS3Response BackupEventsToS3WithoutFiles(int tripId, string profileId, DateTimeOffset eventsReceivedAt, ICollection<AppComponents.Models.Event> events, string filePath, string s3Path)
{
var response = new UploadToS3Response() { Success = false };
var fileName = $"tripevents-{tripId}-{DateTimeOffset.Now.ToString("yyyyMMdd")}-{profileId}";
var s3PathPrefix = s3Path;
try
{
var accessKey = ConfigurationManager.AppSettings["aws:accesskey"];
var accessSecret = ConfigurationManager.AppSettings["aws:secretkey"];
var zippedStream = ZipBytes(fileName,events,tripId);
byte[] zipData = Encoding.ASCII.GetBytes(zippedStream.ToString());
var uploadToS3Response = Helpers.AWSHelper.UploadFiletoS3fromZip(accessKey, accessSecret, zipData, $"{fileName}.json.gz", s3PathPrefix, FileGranularity.Hourly, eventsReceivedAt);
if (uploadToS3Response.Success)
{
response.Success = true;
response.S3FilePath = uploadToS3Response.S3FilePath;
}
}
catch (Exception ex)
{
ex.ToExceptionless().Submit();
throw;
}
return response;
}
вот мой почтовый класс
public byte[] ZipBytes(string filename, ICollection<AppComponents.Models.Event> events, int tripId)
{
var fullFileName = $"{filename}.json.gz";
MemoryStream outputMemStream = new MemoryStream();
ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
zipStream.SetLevel(3); //0-9, 9 being the highest level of compression
byte[] bytes = null;
var newEntry = new ZipEntry($"{filename}.json.gz");
newEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(newEntry);
bytes = WriteEventsToJsonBytes(events, tripId);
MemoryStream inStream = new MemoryStream(bytes);
StreamUtils.Copy(inStream, zipStream, new byte[4096]);
inStream.Close();
zipStream.CloseEntry();
zipStream.IsStreamOwner = false; // False stops the Close also Closing the underlying stream.
zipStream.Close(); // Must finish the ZipOutputStream before using outputMemStream.
outputMemStream.Position = 0;
return outputMemStream.ToArray();
}
вот мой WriteEventsToJsonBytes
private byte[] WriteEventsToJsonBytes(ICollection<AppComponents.Models.Event> events, int tripId)
{
StringBuilder builder = new StringBuilder();
var row = "";
foreach (var eventData in events)
{
eventData.TripId = tripId;
JObject obj = JObject.FromObject(eventData);
row = obj.ToString(Newtonsoft.Json.Formatting.None);
builder.Append(row);
row = "";
}
// convert string to stream
byte[] byteArray = Encoding.ASCII.GetBytes(builder.ToString());
return byteArray;
}
Любая помощь будет высоко ценится