Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

DÚVIDA S3Ninja com SprinMVC

Ola boa tarde, sem querer eu solucionei a outra duvida que eu tinha aberto, então optei por abrir uma nova duvida.

Eu tentei usar o NinjaS3 mais não obtive sucesso, segue o codigo

Dependencias do S3 Ninja

            <!-- s3ninja -->
        <dependency>
            <groupId>com.scireum</groupId>
            <artifactId>s3ninja</artifactId>
            <version>2.3.2</version>
        </dependency>

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.9.11</version>
        </dependency>

        <repositories>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>http://repo.spring.io/milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>

            <repository>
                <id>sonatype-oss-public</id>
                <url>http://oss.sonatype.org/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>

Classe de Configuracao do S3AmazonClient


public class AmazonConfiguration {

    @Bean
    public AmazonS3Client s3Ninja() {
        AWSCredentials credentials = new BasicAWSCredentials(
                "AKIAIOSFODNN7EXAMPLE",
                "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY");
        AmazonS3Client newClient = new AmazonS3Client(credentials,
                new ClientConfiguration());
        newClient.setS3ClientOptions(new S3ClientOptions()
                .withPathStyleAccess(true));
        newClient.setEndpoint("http://localhost:9444/s3");
        return newClient;

    }    
}

SerlvetMVCSpring Eu add AmazonConfiguration

public class ServletSpringMVC extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SecurityConfiguration.class,
                AppWebConfiguration.class, JPAConfiguration.class,
                JPAProductionConfiguration.class,AmazonConfiguration.class };
    }


    // codigo omitido...
}

** Ai no FileSaver

@Component
public class FileSaver {

    @Autowired
    private AmazonS3Client s3;

    public String write(String baseFolder, MultipartFile multipartFile) {
        try {
            s3.putObject("casadocodigo", multipartFile.getOriginalFilename(),
                    multipartFile.getInputStream(), new ObjectMetadata());
            return "http://localhost:9444/s3/casadocodigo/"+multipartFile.getOriginalFilename()+"?noAuth=true";
        } catch (AmazonClientException | IOException e) {
            throw new RuntimeException(e);
        }

    }


}

** Método controller

@RequestMapping(method=RequestMethod.POST)
    @CacheEvict(value="lastProducts", allEntries=true)
    public ModelAndView save(MultipartFile summary,@ModelAttribute("product") @Valid Product product,BindingResult bindingResult,RedirectAttributes redirectAttributes) throws IOException{
        if(bindingResult.hasErrors()){
            return form(product);
        }

        //Sera que passo o product como parametro?
        String webPath = fileSaver.write("uploaded-images",summary);
        product.setSummaryPath(webPath);
        products.save(product);

        redirectAttributes.addFlashAttribute("success", "Produto cadastrado com sucesso");
        return new ModelAndView("redirect:produtos");
    }

Uma das minhas dúvidas é como eu consigo essas crendenciais? Eu tenho que acessar http://localhost:9444/s3?, eu tento mais não consigo. Esta faltando mais alguma configuração? E fica lançando Exception de Connection Refused, poque isso ocorre?

2 respostas
solução!

Oi Cleusa,

  • como eu consigo essas crendenciais?

Essas credenciais seriam as credenciais de acesso do serviço da Amazon que você contrataria. No caso do uso do S3 Ninja localmente, seriam as credenciais de uma conta fictícia que o serviço dele disponibiliza como padrão.

example Tela de boas vindas com as credencias

Exato. O serviço do s3 ninja sobe por padrão na porta 9444 da nossa máquina. Se ele está retornando Connection Refused provavelmente é porque você não subiu o serviço dele na sua máquina.

É simples fazer isso na máquina, dentro do zip do s3 ninja tem um .class chamado IPL. Basta executar esse bytecode $ java IPL que ele sobe pra você.

install

Não parece ter nada de errado com o código. Espero ter ajudado. Abraço!

Deu certo obg Rafael Rollo.