2012-12-05 2 views
1

Perl에서 Amazon :: S3 라이브러리를 사용하여 Amazon S3에 이진 파일을 업로드하는 방법에 대한 예제를 찾을 수 없습니다. 모든 예제는 복사/붙여 넣기가되어 거의 모든 것이 단순한 텍스트 인 것처럼 거의 텍스트/일반 업로드를 수행합니다.Amazon :: S3를 사용하여 Perl에서 이진 파일을 업로드하는 방법은 무엇입니까?

여기 http://metacpan.org/pod/Amazon::S3에서 예입니다 :

my $keyname = 'testing.txt'; 
my $value = 'T'; 
$bucket->add_key(
    $keyname, $value, 
    { content_type  => 'text/plain', 
     'x-amz-meta-colour' => 'orange', 
    } 
); 

이 내용을 "T"와 아마존 S3에 일반 텍스트 파일 'testing.txt'를 만듭니다. 그리고 인터넷의 모든 예제는이 예제를 복사하고 "T"값을 수정합니다. 이진 데이터를 업로드하는 단일 예제를 찾을 수 없습니다.

어떻게 이진 컨텐츠가있는 이미지/jpeg를 Amazon S3에 업로드합니까?

+0

콘텐츠 유형을 'application/octet-stream'으로 변경하겠습니까? –

+0

가능한 복제본 [Perl을 사용하여 Amazon S3에 이미지를 업로드하는 방법] (http://stackoverflow.com/questions/12757574/how-to-upload-images-to-amazon-s3-using-perl) – kmp

답변

3

이 펄은 jpeg 파일을 S3에 업로드하여 압축 된 중복 저장 장치에 저장하고 공개하며 MIME 형식을 설정하여 웹 브라우저에 올바르게 표시되도록합니다. 에서 업로드의 결과를 참조하십시오 :이 제 3 자 소프트웨어를 설치해야한다고 부여 https://s3.amazonaws.com/AppaApps/z/p.jpg

use warnings FATAL => qw(all); 
    use strict; 
    use Data::Dump qw(dump); 
    use Amazon::S3; 

    #---------------------------------------------------------------------- 
    # Constants 
    #---------------------------------------------------------------------- 

    my $s3 = Amazon::S3->new 
    ({aws_access_key_id  => "...", 
     aws_secret_access_key => "...", 
     retry     => 1 
     } 
    ); 

    my $b = $s3->bucket("AppaApps"); # Our bucket 
    my $f = "z/p.jpg";     # A specific file (key) on S3 
    my $F = "p.jpg";     # Local file to upload 

    #---------------------------------------------------------------------- 
    # Upload a file 
    #---------------------------------------------------------------------- 

    $b->add_key_filename($f, "p.jpg", 
    {"x-amz-storage-class"=>"REDUCED_REDUNDANCY", 'x-amz-meta-version'=>'12.11.22', acl_short=>'public-read', 
     "Content-Type"=>"image/jpeg", 
    }); 
    print dump($b->errstr), "\n" if $b->errstr; 
+0

무엇입니까? 기능 : 5.16이 예제에서 사용됩니까? – bodacydo

+1

@bodacydo : 'say'연산자 여야합니다. 그것에 의존하지 않는 것이 좋으며, 적어도 "use v5.16;"으로 써야한다. – mvp

1

을하지만, 해결 방법으로, 나는 s3cmd 사용 및 시스템 내 양동이에 임의의 데이터를 업로드 내 펄 스크립트에서 호출 .

s3cmd는 여기에서 찾을 수 있습니다. http://s3tools.org/s3cmd 키와 권한이 설정되면 perl 스크립트에서 다음을 호출하는 것처럼 쉽습니다. (**이 도구는 사용하기 쉽고 무료로 만들기위한 마이클 루드에 큰 감사를드립니다.)

`s3cmd put YOUR_FILE s3://YOUR_BUCKET/`; 

그것은 해킹,하지만 당신은 우아하지만 실용적인 솔루션을 시도하고자하는 경우이 내가 할 것입니다 .

관련 문제