diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml
index 54561a3..4c5577e 100644
--- a/.github/workflows/maven-publish.yml
+++ b/.github/workflows/maven-publish.yml
@@ -17,7 +17,7 @@ jobs:
with:
java-version: "11"
distribution: "adopt"
- server-id: ossrh
+ server-id: central
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
@@ -25,8 +25,8 @@ jobs:
- name: Publish to the Maven Central Repository
run: mvn --batch-mode -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} deploy
env:
- MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
- MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
+ MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
+ MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
publish-github:
runs-on: ubuntu-latest
diff --git a/changelog.md b/changelog.md
index 0207b74..3212b72 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
# Changelog
+## v1.7.1
+
+### Jul 21, 2025
+
+- FileUpload method fix
+
## v1.7.0
### Jul 07, 2025
diff --git a/pom.xml b/pom.xml
index 1319cc0..ce8b721 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
cms
jar
contentstack-management-java
- 1.7.0
+ 1.7.1
Contentstack Java Management SDK for Content Management API, Contentstack is a headless CMS with an
API-first approach
@@ -61,23 +61,23 @@
-
+
-
-
-
-
+
+ github
+ GitHub Apache Maven Packages
+ https://maven.pkg.github.com/contentstack/contentstack-management-java
+
ossrh
Apache Maven Packages Release
https://oss.sonatype.org/service/local/staging/deploy/maven2/
-
+ -->
1.0.0
@@ -100,7 +100,6 @@
3.3
1.5
3.8.0
- 1.6.13
2.5.3
@@ -338,14 +337,14 @@
- org.sonatype.plugins
- nexus-staging-maven-plugin
- ${nexus-staging-maven-plugin.version}
+ org.sonatype.central
+ central-publishing-maven-plugin
+ 0.8.0
true
- ossrh
- https://oss.sonatype.org/
- true
+ central
+ true
+ published
diff --git a/src/main/java/com/contentstack/cms/stack/FileUploader.java b/src/main/java/com/contentstack/cms/stack/FileUploader.java
index bdfc65b..84cd9f3 100644
--- a/src/main/java/com/contentstack/cms/stack/FileUploader.java
+++ b/src/main/java/com/contentstack/cms/stack/FileUploader.java
@@ -7,12 +7,34 @@
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Objects;
import javax.activation.MimetypesFileTypeMap;
public class FileUploader {
+ // Static map for common file extensions to MIME types
+ private static final Map EXTENSION_TO_MIME;
+ static {
+ EXTENSION_TO_MIME = new HashMap<>();
+ EXTENSION_TO_MIME.put(".svg", "image/svg+xml");
+ EXTENSION_TO_MIME.put(".webp", "image/webp");
+ EXTENSION_TO_MIME.put(".json", "application/json");
+ EXTENSION_TO_MIME.put(".woff", "font/woff");
+ EXTENSION_TO_MIME.put(".woff2", "font/woff2");
+ EXTENSION_TO_MIME.put(".ttf", "font/ttf");
+ EXTENSION_TO_MIME.put(".otf", "font/otf");
+ EXTENSION_TO_MIME.put(".eot", "application/vnd.ms-fontobject");
+ EXTENSION_TO_MIME.put(".mp4", "video/mp4");
+ EXTENSION_TO_MIME.put(".m4a", "audio/mp4");
+ EXTENSION_TO_MIME.put(".mkv", "video/x-matroska");
+ EXTENSION_TO_MIME.put(".webm", "video/webm");
+ EXTENSION_TO_MIME.put(".ico", "image/x-icon");
+ EXTENSION_TO_MIME.put(".csv", "text/csv");
+ EXTENSION_TO_MIME.put(".md", "text/markdown");
+ }
public MultipartBody createMultipartBody(String filePath, String parentUid, String title, String description, String[] tags) {
MultipartBody.Builder builder = new MultipartBody.Builder();
@@ -47,9 +69,16 @@ public MultipartBody createMultipartBody(String filePath, String parentUid, Stri
// Helper method to get content type of file
private String getContentType(File file) {
+ String name = file.getName().toLowerCase();
+ int dot = name.lastIndexOf('.');
+ if (dot != -1) {
+ String ext = name.substring(dot);
+ String mime = EXTENSION_TO_MIME.get(ext);
+ if (mime != null) return mime;
+ }
try {
- java.nio.file.Path source = Paths.get(file.toString());
- MimetypesFileTypeMap m = new MimetypesFileTypeMap(source.toString());
+ java.nio.file.Path source = java.nio.file.Paths.get(file.toString());
+ javax.activation.MimetypesFileTypeMap m = new javax.activation.MimetypesFileTypeMap(source.toString());
return m.getContentType(file);
} catch (IOException e) {
throw new RuntimeException("Failed to determine content type of file", e);
diff --git a/src/test/java/com/contentstack/cms/stack/AssetAPITest.java b/src/test/java/com/contentstack/cms/stack/AssetAPITest.java
index cc149d8..6991097 100644
--- a/src/test/java/com/contentstack/cms/stack/AssetAPITest.java
+++ b/src/test/java/com/contentstack/cms/stack/AssetAPITest.java
@@ -11,6 +11,12 @@
import java.io.IOException;
import java.util.HashMap;
import java.util.Objects;
+import com.contentstack.cms.stack.FileUploader;
+import org.junit.jupiter.api.Test;
+import java.io.File;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
@Tag("API")
class AssetAPITest {
@@ -358,4 +364,19 @@ void testFetchSubfoldersByParentFolderPojo() {
Assertions.assertEquals("https://api.contentstack.io/v3/assets?folder=test_folder&query={parent_uid%3Dparent_uid,%20is_dir%3Dtrue}&include_folders=true", request.url().toString());
}
+ @Test
+ @Disabled("disabled to avoid unnecessary asset creation, Tested working fine")
+ void uploadFile() throws Exception {
+ Contentstack contentstack = new Contentstack.Builder().build();
+ Stack stack = contentstack.stack(API_KEY, MANAGEMENT_TOKEN);
+ Asset asset = stack.asset();
+ String fileName = "/Users/reeshika.hosmani/Downloads/surf-svgrepo-com.svg", parentFolder = "bltd1150f1f7d9411e5", title = "Vacation icon";
+ String[] tags = {"icon"};
+ Response response = asset.uploadAsset(fileName,parentFolder,title,"",tags).execute();
+ if(response.isSuccessful()){
+ System.out.println("uploaded asset successfully:" + response.body().string());
+ } else {
+ System.out.println("Error in uploading" + response.errorBody().string());
+ }
+ }
}