Ich teste, wie Sie mit SDK mit einer Beispiel-TXT-Datei aus einer Webanwendung nach AWS hochladen. Die Datei wird in den Bucket hochgeladen, aber die heruntergeladene Datei aus dem Bucket ist nur ein leeres Notepad-Dokument ohne den Text der ursprünglichen hochgeladenen Datei. Ich bin neu mit Streams arbeiten, also bin ich mir nicht sicher, was hier falsch sein könnte. Kann jemand sehen, warum die Daten in der Übertragungsanfrage nicht gesendet wurden? Danke im Voraus!HttpPostedFileBase Stream-Upload zu AWS SDK-Bucket hat keine Daten
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1))
{
//Save File to Bucket
using (FileStream txtFileStream = (FileStream)UploadedHttpFileBase.InputStream)
{
try
{
TransferUtility fileTransferUtility = new TransferUtility();
fileTransferUtility.Upload(txtFileStream, bucketLocation,
UploadedHttpFileBase.FileName);
}
catch (Exception e)
{
e.Message.ToString();
}
}
}
EDIT:
Sowohl TransferUtility und PutObjectRequest/PutObjectResponse/AmazonS3Client.PutObject gespeichert eine leere Textdatei. Nachdem einige Probleme bei der Instantiierung eines neuen FileStream aufgetreten sind, speicherte ein MemoryStream, der nach dem Zurücksetzen der Startposition auf Null verwendet wurde, eine leere Textdatei. Irgendwelche Ideen?
Neuer Code:
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1))
{
Stream saveableStream = new MemoryStream();
using (Stream source = (Stream)UploadedHttpFileBase.InputStream)
{
source.Position = 0;
source.CopyTo(saveableStream);
}
//Save File to Bucket
try
{
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketLocation,
Key = UploadedHttpFileBase.FileName,
InputStream = saveableStream
};
PutObjectResponse response = client.PutObject(request);
}
catch (Exception e)
{
e.Message.ToString();
}
}
Danke für die Antwort, Andrey. Ich habe sowohl TransferUtility als auch PutObjectRequest/PutObjectResponse/AmazonS3Client.PutObject verwendet und beide haben eine leere Textdatei gespeichert. Wie würde man den Eingabestream in eine nicht temporäre Datei kopieren, ohne MemoryStream zu verwenden? – jle
Ich habe MemoryStream verwendet und die Startposition auf Null zurückgesetzt, nur für den Fall, aber eine leere Datei wird immer noch gespeichert. Irgendwelche Ideen? – jle