From c06865ed1831279df466aa57b829208c0f18bb21 Mon Sep 17 00:00:00 2001 From: Martin Muller Date: Fri, 5 Aug 2016 10:13:38 +0000 Subject: [PATCH] Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128173 jvonka: REPO-839: Fix guess mimetype (if no file ext) - on upload and/or update (after a rename) - improvement to REPO-495 - will also apply to REPO-518 when implemented git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129133 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/impl/NodesImpl.java | 11 +++- .../alfresco/rest/api/tests/NodeApiTest.java | 51 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 9ce38a2d7e..8165040675 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -2295,7 +2295,16 @@ public class NodesImpl implements Nodes ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); String mimeType = mimetypeService.guessMimetype(fileName); - writer.setMimetype(mimeType); + if ((mimeType != null) && (! mimeType.equals(MimetypeMap.MIMETYPE_BINARY))) + { + // quick/weak guess based on file extension + writer.setMimetype(mimeType); + } + else + { + // stronger guess based on file stream + writer.guessMimetype(fileName); + } InputStream is = null; diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index 21be32a2ff..8f6fa2b619 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -895,7 +895,7 @@ public class NodeApiTest extends AbstractBaseApiTest // upload files - String fileName = "quick.pdf"; + String fileName = "quick-2.pdf"; File file = getResourceFile(fileName); MultiPartBuilder multiPartBuilder = MultiPartBuilder.create() @@ -908,6 +908,19 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType()); assertEquals("UTF-8", contentInfo.getEncoding()); + fileName = "quick-2.pdf"; + file = getResourceFile(fileName); + + multiPartBuilder = MultiPartBuilder.create() + .setFileData(new FileData("quick-2", file)); // note: we've deliberately dropped the file ext here + reqBody = multiPartBuilder.build(); + + response = post(getNodeChildrenUrl(fId), user1, reqBody.getBody(), null, reqBody.getContentType(), 201); + document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + contentInfo = document.getContent(); + assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType()); + assertEquals("UTF-8", contentInfo.getEncoding()); + fileName = "example-1.txt"; file = getResourceFile(fileName); @@ -973,6 +986,42 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(MimetypeMap.MIMETYPE_XML, contentInfo.getMimeType()); assertEquals("UTF-8", contentInfo.getEncoding()); + // upload file, rename and then update file + + fileName = "quick.pdf"; + file = getResourceFile(fileName); + + multiPartBuilder = MultiPartBuilder.create() + .setFileData(new FileData(fileName, file)); + reqBody = multiPartBuilder.build(); + + response = post(getNodeChildrenUrl(fId), user1, reqBody.getBody(), null, reqBody.getContentType(), 201); + document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + String docId = document.getId(); + contentInfo = document.getContent(); + assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType()); + assertEquals("UTF-8", contentInfo.getEncoding()); + + // rename (mimeType remains unchanged, binary has not changed) + Document dUpdate = new Document(); + dUpdate.setName("quick.docx"); + + response = put(URL_NODES, user1, docId, toJsonAsStringNonNull(dUpdate), null, 200); + document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + contentInfo = document.getContent(); + assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType()); + assertEquals("UTF-8", contentInfo.getEncoding()); + + fileName = "quick.docx"; + file = getResourceFile(fileName); + BinaryPayload payload = new BinaryPayload(file); + + response = putBinary(getNodeContentUrl(docId), user1, payload, null, null, 200); + document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + contentInfo = document.getContent(); + assertEquals(MimetypeMap.MIMETYPE_OPENXML_WORDPROCESSING, contentInfo.getMimeType()); + assertEquals("UTF-8", contentInfo.getEncoding()); + // cleanup delete(URL_NODES, user1, fId, 204); }