ich zur Zeit den folgenden Code verwenden, um abrufen und String-Daten von Amazon C# dekomprimieren:C# -Code GZIP und laden einen String in 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);
}
}
}
ich diesen Code umkehren wollen, so dass ich komprimieren und Upload String-Daten zu S3, ohne auf die Festplatte geschrieben zu werden. Ich habe versucht, die folgenden, aber ich bin immer eine Ausnahme:
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
}
}
}
}
Die Ausnahme, die ich bekommen habe ist:
Kann keine geschlossene Stream-Zugang.
Was mache ich falsch?
EDIT:
Die Ausnahme auf der schließenden Klammer der auftretenden verwendet (GZipStream zip
Stapelüberwachung:
bei System.IO.MemoryStream.Write (Byte [] Puffer, Int32-Offset, Int32-Zählung)
bei System.I O.Compression.DeflateStream.Dispose (Boolean Entsorgung) bei System.IO.Stream.Close() bei System.IO.Compression.GZipStream.Dispose (Boolean Entsorgung) bei System.IO.Stream.Close()
Wo tritt die Ausnahme auf? Können Sie einen vollständigen Stack-Trace hinzufügen? – dtb
Danke. Ich habe auch Ausnahmedetail – BigJoe714