从S3读取图像时参数无效

时间:2014-02-26 21:23:37

标签: c# .net amazon-web-services amazon-s3 memorystream

尝试将流转换为图片时出现parameter is not valid错误。

我的C#ASP.NET应用程序,我将图像上传到Amazon S3并再次下载以进行操作。

我已经通过S3在线查看上传的图片是否正常。

我正在使用以下代码下载图片:

 using (AmazonS3 client = new AmazonS3Client(accessKey, secretKey))
{
   GetObjectRequest request = new GetObjectRequest
   {
      BucketName = "mybucket",
      Key = "temp/" + sp.FileGuid + Path.GetExtension(sp.FileName)
   };

    using (GetObjectResponse response = client.GetObject(request)) // S3Response
   {

     using (MemoryStream memStream = new MemoryStream())
      {
            int file_size_in_bytes = Convert.ToInt32(response.Headers.GetValues("Content-Length")[0]);
            byte[] buffer = new Byte[file_size_in_bytes];
            int numBytesToRead = file_size_in_bytes;

           int read;
           while ((read = response.ResponseStream.Read(buffer, 0, buffer.Length)) > 0)
           {
             memStream.Write(buffer, 0, read);
            }

   response.ResponseStream.Close();

    ...

我将图像的响应流转换为字节数组,以便将其传递给WCF服务以供以后操作。

在WCF中我做(部分代码):

  using (Stream filestream = new MemoryStream(sp.ImageFile)
  {

     **// GET THE ERROR IN THIS LINE!**
     System.Drawing.Image image = System.Drawing.Image.FromStream(filestream);
  }    

sp.ImageFile将转换响应流保存为字节数组。

我将字节数组读入流中,然后从流中再次创建图像。在上面的代码中,您可以看到我在哪里获得parameter is not valid error

我假设在某些地方将图像的流数据转换为字节数组或流式传输图像数据,因此它创建了损坏的图像数据,但我不确定。

花一整天努力解决这个问题但没有成功。唯一可行的方法是直接将上传的文件流传递给System.Drawing.FromStream,但这不是我想要做的。

真的需要你的帮助。

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助。如果流未定位在开头,则图像可能无法加载。

  using (Stream filestream = new MemoryStream(sp.ImageFile)
  {
     var checkSeek = filestream.Seek(0, SeekOrigin.Begin);

     **// GET THE ERROR IN THIS LINE!**
     System.Drawing.Image image = System.Drawing.Image.FromStream(filestream);
  }