Tôi hiện đang sử dụng đoạn mã sau để lấy và giải nén dữ liệu chuỗi từ Amazon C#:C# để GZip và tải lên một chuỗi đến 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);
}
}
}
tôi muốn đảo ngược mã này để tôi có thể nén và upload chuỗi dữ liệu đến S3 mà không bị ghi vào đĩa. Tôi đã thử các sau đây, nhưng tôi nhận được một ngoại lệ:
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
}
}
}
}
Trường hợp ngoại lệ Tôi nhận được là:
Không thể truy cập một Stream khép kín.
Tôi đang làm gì sai?
EDIT:
Trường hợp ngoại lệ là xảy ra trên khung bế mạc sử dụng (GZipStream nén
Stack trace:
tại System.IO.MemoryStream.Write (Byte [] bộ đệm, độ lệch Int32, số Int32)
tại System.I O.Compression.DeflateStream.Dispose (Boolean xử lý) tại System.IO.Stream.Close() tại System.IO.Compression.GZipStream.Dispose (Boolean xử lý) tại System.IO.Stream.Close()
Trường hợp ngoại lệ xảy ra? Bạn có thể thêm dấu vết ngăn xếp đầy đủ không? – dtb
Cảm ơn. Ngoài ra tôi đăng chi tiết ngoại lệ – BigJoe714