2017-04-26 5 views
3

(내가 유래에 대해 찾을 수있는 모든 유사한 질문을 연구했습니다, 그리고 그들 중 누구도 내 문제를 해결하는 데 도움이 없음)아마존 S3 애니메이션 GIF는 - 단지 첫 번째 프레임을 업로드

난에있는 GIF를 업로드 할 수 있습니다 I는 업로드 경우

public bool UploadFile(CdnFile request) 
{ 
    var transfer = new TransferUtility(CdnConfig.AccessKey, CdnConfig.SecretKey, ep); 
    var uploadRequest = new TransferUtilityUploadRequest(); 
    uploadRequest.InputStream = new MemoryStream(request.FileBytes); 

    var result = transfer.BeginUpload(s3Req2, cb, null); 
    transfer.EndUpload(result); 
} 

이 다소 애니메이션 .gif 중요 들면 .JPG 잘 동작은 GIF의 1 프레임 (업로드 : request.FileBytes 바이트 배열이다 이런 아마존 S3, 같은 GIF를 통해 S3 직접, 잘 작동). 따라서 파일을 스트리밍 또는 변환하는 방법과 관련이 있어야하지만 문제가 발생하는 위치를 찾는 방법을 모르겠습니다.

다음과 같이 request.FileBytes를 만듭니다. 'imageData'는 이미지의 원시 데이터입니다 (Chrome은 S3에 업로드하려고하는 애니메이션 GIF 미리보기를 표시 할 때이 이미지 데이터를 사용하고 괜찮습니다.) :

var data = Convert.FromBase64String(imageData); 
var img = new Bitmap(new MemoryStream(data)); 
fileBytes = img.SaveAsGif(); 

public static byte[] SaveAsGif(this Image img, long quality = 100) 
{ 
    ImageCodecInfo gifEncoder = GetEncoder(ImageFormat.Gif); 

    Encoder myEncoder = Encoder.Quality; 

    EncoderParameters myEncoderParameters = new EncoderParameters(1); 

    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality); 
    myEncoderParameters.Param[0] = myEncoderParameter; 

    using (MemoryStream msGif = new MemoryStream()) 
    { 
     img.Save(msGif, gifEncoder, myEncoderParameters); 
     return msGif.ToArray(); 
    } 
} 

답변

1

이 코드는 저에게 잘 돌아가며, 사용 케이스에 맞게 조정할 수 있습니다. 나는 로컬 파일에서 GIF 파일을 업로드하고는/표시 업로드 한 후 잘 작동 :

 using (var client = new AmazonS3Client("AKIAI5ZL44fake4442COJA", "4sYnPuA1zMkhghghghghTpX4F5/FUXGDiAKm", RegionEndpoint.USEast1)) 
     { 
      var request = new PutObjectRequest 
      { 
       BucketName = "bucketname", 
       ContentType = "image/gif", 
       Key = "test.gif", 
       FilePath = @"c:\dev\006.gif" 
      }; 
      var response = client.PutObject(request); 
     } 
0

내 SaveAsGif의 방법으로 문제가, 그래서 문제가 코덱 함께 할 수있는 뭔가입니다. 내 요청을 만들 수 있습니다.이 같은 코덱을 사용하지 않고 파일 및 작동합니다 :

var imageStream = new MemoryStream(data); 
fileBytes = imageStream.ToArray();