added method to upload a resource given a file
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-catalogue/ckan-util-library@134577 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
b3a3ae37d2
commit
af25dfd8b0
|
@ -1,5 +1,6 @@
|
|||
package org.gcube.datacatalogue.ckanutillibrary;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -351,4 +352,15 @@ public interface DataCatalogue {
|
|||
* @return a list of groups
|
||||
*/
|
||||
List<CkanGroup> getGroups();
|
||||
|
||||
/**
|
||||
* Upload a file to ckan and attach it as resource.
|
||||
* @param file
|
||||
* @param packageId
|
||||
* @param authorizationToken
|
||||
* @param fileName
|
||||
* @param description
|
||||
* @return true on success, false otherwise
|
||||
*/
|
||||
boolean uploadResourceFile(File file, String packageId, String authorizationToken, String fileName, String description);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@ import static com.google.common.base.Preconditions.checkArgument;
|
|||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
|
@ -38,11 +40,14 @@ import org.slf4j.LoggerFactory;
|
|||
import eu.trentorise.opendata.jackan.CheckedCkanClient;
|
||||
import eu.trentorise.opendata.jackan.CkanClient;
|
||||
import eu.trentorise.opendata.jackan.exceptions.JackanException;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpEntity;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpResponse;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpStatus;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.client.methods.HttpGet;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.client.methods.HttpPost;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.ContentType;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.StringEntity;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.impl.client.CloseableHttpClient;
|
||||
import eu.trentorise.opendata.jackan.internal.org.apache.http.impl.client.HttpClientBuilder;
|
||||
import eu.trentorise.opendata.jackan.model.CkanDataset;
|
||||
|
@ -1669,4 +1674,46 @@ public class DataCatalogueImpl implements DataCatalogue{
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean uploadResourceFile(File file, String packageId,
|
||||
String token, String name, String description) {
|
||||
|
||||
// checks
|
||||
checkNotNull(file);
|
||||
checkNotNull(packageId);
|
||||
checkNotNull(token);
|
||||
checkNotNull(name);
|
||||
|
||||
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
|
||||
String apiRequestUrl = CKAN_CATALOGUE_URL + "/api/3/action/resource_create";
|
||||
HttpPost httpPostRequest = new HttpPost(apiRequestUrl);
|
||||
httpPostRequest.setHeader("Authorization", token);
|
||||
HttpEntity mpEntity =
|
||||
MultipartEntityBuilder.create()
|
||||
.addTextBody("package_id", packageId)
|
||||
.addTextBody("url", "upload")
|
||||
.addTextBody("description", description == null ? "" : description)
|
||||
.addTextBody("name", name)
|
||||
.addBinaryBody("upload", file,
|
||||
ContentType.create(
|
||||
"application/octet-stream",
|
||||
Charset.forName("UTF-8")),
|
||||
name)
|
||||
.build();
|
||||
|
||||
httpPostRequest.setEntity(mpEntity);
|
||||
HttpResponse response = httpClient.execute(httpPostRequest);
|
||||
|
||||
if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 300) {
|
||||
throw new RuntimeException("failed to add the file to CKAN storage. response status line from "
|
||||
+ apiRequestUrl + " was: " + response.getStatusLine());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("Error while uploading file");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue