É possível fazer upload de um arquivo txt / pdf / png para o Amazon S3 em uma única ação e obter o URL do arquivo enviado como a resposta. Em caso afirmativo, o AWS Java SDK é a biblioteca certa que preciso adicionar ao meu aplicativo da web java struts2.
Por favor, me sugira uma solução para isso.
java
amazon-s3
amazon-web-services
Sangram Anand
fonte
fonte
Respostas:
Para tornar o arquivo público antes de enviar, você pode usar o
#withCannedAcl
método dePutObjectRequest
:fonte
Não, você não pode obter o URL em uma única ação, mas duas :)
Em primeiro lugar, pode ser necessário tornar o arquivo público antes de enviar, porque não faz sentido obter o URL que ninguém pode acessar. Você pode fazer isso configurando ACL como Michael Astreiko sugeriu. Você pode obter o URL do recurso chamando
getResourceUrl
ougetUrl
.Nota1: A diferença entre
getResourceUrl
egetUrl
é que getResourceUrl retornará nulo quando ocorrer uma exceção.Nota2: o
getUrl
método não está definido na interface AmazonS3. Você precisa lançar o objeto para AmazonS3Client se usar o construtor padrão.fonte
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")
funciona o URL sem uma chamada para a AWS.getResourceUrl
não está no SDK mais recente.s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();
obterá o url público.Você pode resolver isso sozinho com base no intervalo e no nome do arquivo que especificar na solicitação de upload.
por exemplo, se o seu intervalo for
mybucket
e o seu arquivo for nomeadomyfilename
:O
s3
bit será diferente dependendo da região em que seu intervalo está. Por exemplo, eu uso a região sudeste da Ásia para que meus urls sejam como:fonte
As respostas de @hussachai e @Jeffrey Kemp são muito boas. Mas eles têm algo em comum: o url retornado é no estilo de host virtual, não no estilo de caminho. Para obter mais informações sobre o estilo de URL s3, consulte AWS S3 URL Styles . No caso de algumas pessoas quererem que o URL s3 do estilo do caminho seja gerado. Aqui está o passo. Basicamente, tudo será igual às respostas de @hussachai e @Jeffrey Kemp, apenas com a alteração de configuração de uma linha conforme abaixo:
Isso irá gerar url como: https://s3.us-west-2.amazonaws.com/mybucket/myfilename
fonte
Da mesma forma, se você quiser um link por meio do s3Client, poderá usar a seguir.
fonte
um pouco velho, mas ainda para qualquer um que tropece nisso no futuro:
você pode fazer isso com uma linha, supondo que já escreveu o CredentialProvider e o AmazonS3Client.
Isso parecerá assim:
e se você não escreveu o CredentialProvider e o AmazonS3Client, basta adicioná-los antes de obter o URL como este:
fonte
com isso, você pode recuperar o link do arquivo já carregado para o balde S3.
fonte
O método abaixo carrega o arquivo em uma pasta específica em um intervalo e retorna a url gerada do arquivo carregado.
fonte