2013-06-14 7 views
1

filepicker.io를 사용하여 여러 s3 버킷에 업로드해야합니다. 나는 해커가 있었지만 이것을 할 수있는 방법이 있음을 나타내는 a tweet을 발견했습니다. 지원은 아직 나에게 돌아 오지 않았다. 그래서 나는 여기있는 누군가가 이미 그 대답을 알고 있기를 바라고있다.Filepicker.io의 여러 s3 버킷

답변

2

두 번째 애플리케이션/API 키를 생성 해 보았습니까? S3/AWS 자격증 명을 계정에 직접 연결하는 대신 응용 프로그램/API 키로 잠그는 것 같습니다.

+0

네, 그게 제가 다른 곳에서도 읽은 것입니다. 지원은 방금 나에게 돌아 왔어. 그것은 마치 그들이 그 트윗에서 암시 한 것처럼 보입니다. – Ben

1

지원이 나에게 돌아 왔습니다. prod/staging/dev 사이에서 전환하는 경우에는 괜찮은 여러 응용 프로그램을 만드는 것 외에는 아무 것도 할 수 없지만 임의의 버킷에 업로드해야하는 경우에는 좋은 해결책이 아닙니다.

해결 방법 파일을 업로드 한 후 x-amz-copy-source 헤더를 사용하여 PUT 요청을 실행하여 올바른 버킷에 복사합니다.

이것은 파일 당 두 개의 추가 요청을 요구하기 때문에 꽤 해킹입니다. 하나는 filepicker.stat이고 다른 하나는 s3 (또는 서버) 호출입니다.

1

@ 벤은

나는 많은 버킷으로 갈 필요가 파일의 동일한 문제와 코드를 개발하고있다. 나는 ASP.net에서 일하고있다.

내가 한 것은 자체 S3 버킷이있는 하나의 Filepicker '응용 프로그램'입니다. 자바 스크립트 onSuccess() 함수 (이미 filepicker.store()에 전달 된 매개 변수)의 서버 콜백이 있습니다. 이 콜백은 어쨌든 책 관리를하기 위해 거기에 있어야했습니다.

그래서 AWS SDK를 사용하는 서버 쪽 콜백 코드에 추가 비트를 추가하여 버킷에서 개체를 복사하여 filepicker가 최종 대상 버킷에 업로드합니다. 이 다른 서버 언어에 대한 AWS SDK를가하고 좋은 소식은 아마존 사이에 객체를 복사 부과하지 않습니다이다

public bool MoveObject(string bucket1, string key1, string bucket2, string key2 = null) 
{ 
    bool success = false; 
    if (key2 == null) key2 = key1; 
    Logger logger = new Logger(); // my logging system 
    try 
    { 
     RegionEndpoint region = RegionEndpoint.EUWest1; // use your region here 
     using (AmazonS3Client s3Client = new AmazonS3Client(region)) 
     { 
      // TODO: CheckForBucketFunction 
      CopyObjectRequest request = new CopyObjectRequest(); 
      request.SourceBucket = bucket1; 
      request.SourceKey = key1; 
      request.DestinationBucket = bucket2; 
      request.DestinationKey = key2; 

      S3Response response = s3Client.CopyObject(request); 
      logger.Info2Log("response xml = \n{0}\n", response.ResponseXml); 
      response.Dispose(); 
      success = true; 
     } 
    } 
    catch (AmazonS3Exception ex) 
    { 
     logger.Info2Log("Error copying file between buckets: {0} - {1}", 
      ex.ErrorCode, ex.Message); 
     success = false; 
    } 

    return success; 
} 

:

이 내 C#을 이동 코드, 또는 오히려 복사, 버킷 사이의 객체이다 동일한 지역의 양동이.

이제 파일 피커 응용 프로그램 버킷에서 개체를 삭제하는 방법을 결정해야합니다. 더 많은 AWS SDK 코드를 사용하여 서버에서이 작업을 수행 할 수는 있지만 파일 피커 콘솔에있는 객체에 대한 링크를 남기므로 지저분 할 것입니다. 아니면 filepicker 코드를 사용하여 브라우저에서 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. Knox 라이브러리를 사용하여 Node.js로 지금 수행하려고합니다. 어떤 이유로 인해 요청이 처리되고 오류가 발생하지 않지만 개체가 복사되지 않습니다. 그것은 단지 4 메가 ​​바이트 비디오이므로 원자 복사 작업의 경우 5GB 제한을 넘지 않는다고 생각합니다. – Ben