В настоящее время я использую следующий код для извлечения и распаковывать строки данных из Amazon C#:C# код для GZip и загрузить строку в Amazon S3
GetObjectRequest getObjectRequest = new GetObjectRequest().WithBucketName(bucketName).WithKey(key);
using (S3Response getObjectResponse = client.GetObject(getObjectRequest))
{
using (Stream s = getObjectResponse.ResponseStream)
{
using (GZipStream gzipStream = new GZipStream(s, CompressionMode.Decompress))
{
StreamReader Reader = new StreamReader(gzipStream, Encoding.Default);
string Html = Reader.ReadToEnd();
parseFile(Html);
}
}
}
Я хочу обратить этот код так, что я могу сжать и загрузить строковые данные на S3 без записи на диск. Я попытался следующие, но я получаю исключение:
using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKeyID, AWSSecretAccessKeyID))
{
string awsPath = AWSS3PrefixPath + "/" + keyName+ ".htm.gz";
byte[] buffer = Encoding.UTF8.GetBytes(content);
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress))
{
zip.Write(buffer, 0, buffer.Length);
PutObjectRequest request = new PutObjectRequest();
request.InputStream = ms;
request.Key = awsPath;
request.BucketName = AWSS3BuckenName;
using (S3Response putResponse = client.PutObject(request))
{
//process response
}
}
}
}
Исключение я получаю:
Не удается получить доступ к закрытой Stream.
Что я делаю неправильно?
РЕДАКТИРОВАТЬ:
Исключение встречающийся на закрывающей скобки используя (GZipStream почтовый
Стек трассировки:
на System.IO.MemoryStream.Write (Байт [] буфер, смещение Int32, количество Int32)
по адресу System.I O.Compression.DeflateStream.Dispose (Boolean утилизации) при System.IO.Stream.Close() в System.IO.Compression.GZipStream.Dispose (булево утилизации) при System.IO.Stream.Close()
Где происходит исключение? Можете ли вы добавить полную трассировку стека? – dtb
Спасибо. Также я разместил исключение подробно – BigJoe714