2012-11-29 2 views
3

다음 코드 결과가 S3에 0 바이트 파일이되고 오류 메시지가 나타나지 않는 버그를 수정하려고합니다.Amazon S3에 대한 FileUpload 결과가 0 바이트 파일

이 코드는 이미지와 원하는 이미지 경로 (데이터베이스 래퍼 객체에서)를 Amazon의 S3에 포함하는 스트림 (파일 이름이 약한 FileUpload4)을 피드하지만 파일 자체는 업로드되지 않습니다.

CloudUtils.UploadAssetToCloud(FileUpload4.FileContent, ((ImageContent)auxSRC.Content).PhysicalLocationUrl); 
ContentWrapper.SaveOrUpdateAuxiliarySalesRoleContent(auxSRC); 

번째 라인은 단순히 (가정) 업로드 픽쳐에 대한 정보를 저장하는 데이터베이스 객체를 저장한다. 이 저장은 오류없이 위의 행이 실행됨을 보여줍니다.

통화 위의 첫 번째 라인은이 방법에서, 적절한 bucketname 검색 한 후 : 나는 스트림이 좋은 스트림 있는지 만들었

public static bool UploadAssetToCloud(Stream asset, string path, string bucketName, AssetSecurity security = AssetSecurity.PublicRead) 
{ 
    TransferUtility txferUtil; 
    S3CannedACL ACL = GetS3ACL(security); 

    using (txferUtil = new Amazon.S3.Transfer.TransferUtility(AWSKEY, AWSSECRETKEY)) 
    { 
     TransferUtilityUploadRequest request = new TransferUtilityUploadRequest() 
      .WithBucketName(bucketName) 
      .WithTimeout(TWO_MINUTES) 
      .WithCannedACL(ACL) 
      .WithKey(path); 
     request.InputStream = asset; 
     txferUtil.Upload(request); 
    } 

    return true; 
} 

을 - 나는, 다른 곳에서는 내가 권한이있는 저장할 수 있습니다 버킷이 존재하고 경로는 괜찮습니다 (파일은 S3에서 대상에 생성되며 스트림의 내용으로 채워지지 않습니다). 나는 내 재치에 가깝다. 내가 뭘 놓치고 있니?

편집 : 내 동료 중 한 명은 FileUpload의 PostedFile 속성이 더 좋을 것이라고 지적했습니다. 대신 지금은 스트림을 꺼내고 있습니다. 여전히 작동하지 않습니다.

+0

스트림의 위치는 무엇입니까? 위치를 0으로 재설정해야 할 수도 있습니다. – JMarsch

답변

2

스트림이 올바르게 배치 되었습니까? asset.Position을 확인하여 위치가 스트림의 시작으로 설정되어 있는지 확인하십시오.

asset.Seek(0, SeekOrigin.Begin); 

편집

OK, 더 추측 (그래도, 아래 추측에있어) : (이 모든 당신은 여전히 ​​손으로 "잘 들어오는 스트림에서 읽을 수 있다고 가정한다 ")

  1. 그냥 테스트를 들면, TransferUtility에 간단하게 업로드 방법 중 하나를 시도 - 어쩌면 그냥 파일 경로 문자열을 사용 하나. 이것이 작동하면 UploadRequest 객체에 설정할 추가 속성이있을 수 있습니다.

  2. UploadProgressEvent를 UploadRequest 객체에 연결하면 잘못된 점에 대한 추가 단서가 있습니까?

  3. UploadRequest의 API에는 InputStream 속성과 WithInputStream Fluent API가 모두 포함되어있는 것으로 나타났습니다. InputStream 설정시 버그가있을 수 있습니까? 어쩌면 .WithInputStream API를 사용해보십시오.

+0

그 일을 시도했지만 결과가 없습니다.PostedFile 속성으로 전환 한 후 위치 재설정을 시도하지 않았지만 지금 시도 할 것입니다. – Jeff

+0

당신의 추측은 그다지 좋지 않았습니다. 그러나 그들은 나를 올바른 길로 인도했습니다. 대부분의 경우 업로드가 동일한 파일에서 두 번 호출됩니다. 이것은 문제의 원인으로 보였다. 한 번만 업로드가 발생하도록 코드를 변경하면 문제가 해결됩니다. – Jeff

+0

당신이 그것을 알아 낸 것을 기쁘게 생각합니다! 답변 투표 해 주셔서 감사합니다! – JMarsch

0

어떤 스트림을 사용하고 있습니까? 사용중인 스트림이 mark() 및 reset() 메소드를 지원합니까?

업로드 방법이 처음에 주어진 스트림에 대한 MD5를 계산 한 다음 업로드 할 수 있습니다. 따라서 스트림이 두 가지 방법을 지원하지 않으면 MD5 계산시에 eof에 도달 한 다음 스트림에 대해 전치 할 수 없습니다. 스트림을 사용하여 개체를 업로드하십시오.

+0

FileUpload 컨트롤에서 파일을 포함하는 스트림을 사용하고 있습니다. – Jeff

관련 문제