2011-06-25 45 views
5

Làm cách nào để lưu một đối tượng bitmap làm hình ảnh vào Amazon S3?Thêm tệp vào thùng trên Amazon S3 bằng C#

Tôi đã thiết lập mọi thứ nhưng độ nét C giới hạn của tôi đang ngăn tôi thực hiện việc này.

// I have a bitmap iamge 
Bitmap image = new Bitmap(width, height); 

// Rather than this 
image.save(file_path); 

// I'd like to use S3 
S3 test = new S3(); 
test.WritingAnObject("images", "testing2.png", image); 

// Here is the relevant part of write to S3 function 
PutObjectRequest titledRequest = new PutObjectRequest(); 
titledRequest.WithMetaData("title", "the title") 
      .WithContentBody("this object has a title") 
      .WithBucketName(bucketName) 
      .WithKey(keyName); 

Như bạn có thể thấy hàm S3 chỉ có thể lấy một chuỗi và lưu nó làm phần thân của tệp.

Làm cách nào tôi có thể viết điều này theo cách nó cho phép tôi chuyển vào đối tượng bitmap và lưu nó dưới dạng hình ảnh? Có lẽ là một dòng? Hoặc như một mảng byte?

Tôi đánh giá cao bất kỳ trợ giúp nào.

+0

Ummm ... lưu hình ảnh của bạn vào một tệp, chuyển đổi tệp thành chuỗi hex và chuyển chuỗi đó? Tôi không biết gì về s3 nhưng tôi nghĩ điều này có thể hữu ích. – Vercas

+0

Tôi không muốn chi phí lưu hình ảnh vào tệp trước. Tôi chắc chắn nó có thể được thực hiện trong khi hình ảnh vẫn còn trong bộ nhớ. – Abs

+0

Sau đó lưu nó vào luồng bộ nhớ. – Vercas

Trả lời

11

Bạn sẽ sử dụng WithInputStream hoặc WithFilePath. Ví dụ về việc lưu hình ảnh mới vào S3:

using (var memoryStream = new MemoryStream()) 
{ 
    using(var yourBitmap = new Bitmap()) 
    { 
     //Do whatever with bitmap here. 
     yourBitmap.Save(memoryStream, ImageFormat.Jpeg); //Save it as a JPEG to memory stream. Change the ImageFormat if you want to save it as something else, such as PNG. 
     PutObjectRequest titledRequest = new PutObjectRequest(); 
     titledRequest.WithMetaData("title", "the title") 
      .WithInputStream(memoryStream) //Add file here. 
      .WithBucketName(bucketName) 
      .WithKey(keyName); 
    } 
} 
+0

Ok điều này có ý nghĩa, làm cách nào để chuyển đổi đối tượng Bitmap thành luồng bộ nhớ? Xin lỗi nếu đây là một câu hỏi đơn giản nhưng tôi là một newbie khi nói đến C#. – Abs

+1

@Abs: Tôi đã cập nhật mẫu mã để bao gồm ví dụ về việc lưu Bitmap vào MemoryStream. – vcsjones

+0

Nó hoạt động. Nhưng tôi phải gọi hàm '.WithInputStream (memoryStream)' sau 'WithKey (keyName)'. Tôi bây giờ chỉ cần giải quyết một không thể truy cập một luồng kín khi tôi cố gắng làm điều này: 'using (S3Response responseWithMetadata = client.PutObject (titleRequest))' - bất kỳ ý tưởng nào? – Abs

2

Set thuộc tính của đối tượng yêu cầu của bạn InputStream:

titledRequest.InputStream = image; 
Các vấn đề liên quan