Service
Creamos el paquete com.tutosoftware.divulgadorapi.serviceAhora creamos la clase EvidenciaService
package com.tutosoftware.divulgadorapi.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.GeneralSecurityException;
import java.util.Collections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.tutosoftware.divulgadorapi.domain.Evidencia;
import com.tutosoftware.divulgadorapi.domain.EvidenciaKey;
import com.tutosoftware.divulgadorapi.dto.EvidenciaDto;
import com.tutosoftware.divulgadorapi.repository.EvidenciaRepository;
@Service
public class EvidenciaService {
@Autowired
EvidenciaRepository evidenciaRepository;
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final String SERVICE_ACOUNT_KEY_PATH = getPathToGoodleCredentials();
private static String getPathToGoodleCredentials() {
String currentDirectory = System.getProperty("user.dir");
Path filePath = Paths.get(currentDirectory, "cred.json");
return filePath.toString();
}
public Evidencia uploadImageToDrive(File file,EvidenciaDto evidenciaDto) throws GeneralSecurityException, IOException {
Evidencia res = new Evidencia();
EvidenciaKey ek=new EvidenciaKey();
try{
/*
Para sacar el folder id es de la siguiente manera
***Folder id**********************
https://drive.google.com/drive/folders/1ALuA49o1DgRFbYLGg_m7LNT4LfW2MY9o
*/
String folderId = "1ALuA49o1DgRFbYLGg_m7LNT4LfW2MY9o";
Drive drive = createDriveService();
com.google.api.services.drive.model.File fileMetaData = new com.google.api.services.drive.model.File();
String contentType = getMIMEType(file);
fileMetaData.setName(file.getName());
fileMetaData.setParents(Collections.singletonList(folderId));
FileContent mediaContent = new FileContent(contentType, file);
com.google.api.services.drive.model.File uploadedFile = drive.files().create(fileMetaData, mediaContent)
.setFields("id").execute();
String fileUrl = "https://drive.google.com/uc?export=view&id="+uploadedFile.getId();
System.out.println("FILE URL: " + fileUrl);
file.delete();
ek.setTituloNoticia(evidenciaDto.getTituloNoticia());
ek.setFechaPublicacion(evidenciaDto.getFechaPublicacion());
ek.setIdArchivo(uploadedFile.getId());
res=evidenciaRepository.save(new Evidencia(ek,evidenciaDto.getComunicador()));
}catch (Exception e){
System.out.println(e.getMessage());
}
return res;
}
private Drive createDriveService() throws GeneralSecurityException, IOException {
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(SERVICE_ACOUNT_KEY_PATH))
.createScoped(Collections.singleton(DriveScopes.DRIVE));
return new Drive.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
JSON_FACTORY,
credential)
.build();
}
public static String getMIMEType(File file){
if(file.isDirectory()){return "directorio";}
if(!file.exists()){return "fichero innexistente";}
try{
URL url = file.toURL();
URLConnection connection = url.openConnection();
return connection.getContentType();
}catch(MalformedURLException mue){
return mue.getMessage();
}catch(IOException ioe){
return ioe.getMessage();
}
}
}