Estou criando uma web aplicação e gostaria de armazenar arquivos de imagem dela no Google Cloud Storage. Essa aplicação poderá subir ou baixar as imagens conforme a necessidade.
Segui os passos dos tutoriais do Google mas encontrei problemas que não consegui achar solução. Alguém poderia me ajudar?
Já baixei o JSON e o adicionei nas variáveis de ambiente do computador
método que fará o upload das Imagens:
@SuppressWarnings(“deprecation”)
public String salvarImagem(Part file) {
Storage storage = StorageOptions.getDefaultInstance().getService();
try {
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String fileName = file.getSubmittedFileName() + dtString;
List<Acl> acls = new ArrayList<>();
Acl acl = storage.getAcl("webeer-cervejas", User.ofAllAuthenticatedUsers());
acls.add(Acl.of(Acl.User.ofAllUsers(), Acl.Role.OWNER));
BlobInfo blobInfo = storage.create(
BlobInfo.newBuilder("webeer-cervejas", fileName)
//.setAcl(acls)
.build(),
file.getInputStream());
return blobInfo.getMediaLink();
} catch (IllegalStateException | IOException e) {
throw new RuntimeException(e);
}
}
Método do Servelet que receberá a imagem:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Part filePart = request.getPart("upload");
String nameFile = filePart.getSubmittedFileName();
InputStream filecontent = filePart.getInputStream();
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
InputStream fileContent = filePart.getInputStream();
FileSaver fs = new FileSaver();
fs.salvarImagem(filePart);
System.out.println("Salvo com sucesso.");
}
}
Meu POM:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.14.0</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-storage</artifactId>
<version>v1-rev139-1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client</artifactId>
<version>1.26.0</version>
</dependency>
O erro que aparece ao tentar executar o método:
Type Exception Report
Message Servlet execution threw an exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.NoClassDefFoundError: com/google/auth/Credentials
ubhiya.Controller.ImageSaver.doPost(ImageSaver.java:72)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.ClassNotFoundException: com.google.auth.Credentials
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1138)
ubhiya.Controller.ImageSaver.doPost(ImageSaver.java:72)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
Obrigado!