mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
CLOUD-2214: Mime type is removed during uploading file via WebDav
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@58846 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
|
|||||||
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||||
import org.alfresco.service.cmr.repository.MimetypeService;
|
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||||
|
import org.alfresco.service.cmr.repository.MimetypeServiceAware;
|
||||||
import org.alfresco.util.TempFileProvider;
|
import org.alfresco.util.TempFileProvider;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@@ -58,7 +59,7 @@ import org.springframework.aop.framework.ProxyFactory;
|
|||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter
|
public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter, MimetypeServiceAware
|
||||||
{
|
{
|
||||||
private static final Log logger = LogFactory.getLog(AbstractContentWriter.class);
|
private static final Log logger = LogFactory.getLog(AbstractContentWriter.class);
|
||||||
|
|
||||||
|
@@ -57,6 +57,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
|
|||||||
import org.alfresco.service.cmr.repository.ContentService;
|
import org.alfresco.service.cmr.repository.ContentService;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||||
import org.alfresco.service.cmr.repository.MimetypeService;
|
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||||
|
import org.alfresco.service.cmr.repository.MimetypeServiceAware;
|
||||||
import org.alfresco.service.cmr.repository.NoTransformerException;
|
import org.alfresco.service.cmr.repository.NoTransformerException;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -540,9 +541,9 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// supply the writer with a copy of the mimetype service if needed
|
// supply the writer with a copy of the mimetype service if needed
|
||||||
if (writer instanceof AbstractContentWriter)
|
if (writer instanceof MimetypeServiceAware)
|
||||||
{
|
{
|
||||||
((AbstractContentWriter)writer).setMimetypeService(mimetypeService);
|
((MimetypeServiceAware)writer).setMimetypeService(mimetypeService);
|
||||||
}
|
}
|
||||||
|
|
||||||
// give back to the client
|
// give back to the client
|
||||||
|
@@ -30,6 +30,8 @@ import org.alfresco.service.cmr.repository.ContentIOException;
|
|||||||
import org.alfresco.service.cmr.repository.ContentReader;
|
import org.alfresco.service.cmr.repository.ContentReader;
|
||||||
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||||
|
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||||
|
import org.alfresco.service.cmr.repository.MimetypeServiceAware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper for cache writer that is aware of backing store
|
* Wrapper for cache writer that is aware of backing store
|
||||||
@@ -41,7 +43,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
|
|||||||
* @author Viachaslau Tsikhanovich
|
* @author Viachaslau Tsikhanovich
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BackingStoreAwareCacheWriter implements ContentWriter
|
public class BackingStoreAwareCacheWriter implements ContentWriter, MimetypeServiceAware
|
||||||
{
|
{
|
||||||
/** Cache writer **/
|
/** Cache writer **/
|
||||||
private ContentWriter cacheWriter;
|
private ContentWriter cacheWriter;
|
||||||
@@ -195,4 +197,9 @@ public class BackingStoreAwareCacheWriter implements ContentWriter
|
|||||||
this.cacheWriter.guessEncoding();
|
this.cacheWriter.guessEncoding();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMimetypeService(MimetypeService mimetypeService)
|
||||||
|
{
|
||||||
|
((MimetypeServiceAware) cacheWriter).setMimetypeService(mimetypeService);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,11 +20,22 @@ package org.alfresco.repo.content.caching;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.content.ContentContext;
|
import org.alfresco.repo.content.ContentContext;
|
||||||
import org.alfresco.repo.content.filestore.FileContentStore;
|
import org.alfresco.repo.content.filestore.FileContentStore;
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.service.cmr.repository.ContentReader;
|
import org.alfresco.service.cmr.repository.ContentReader;
|
||||||
|
import org.alfresco.service.cmr.repository.ContentService;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.ApplicationContextHelper;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
@@ -108,6 +119,33 @@ public class FullTest
|
|||||||
assertEquals("Reader should get correct content", content, reader.getContentString());
|
assertEquals("Reader should get correct content", content, reader.getContentString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CLOUD-2214: Mime type is removed during uploading file via WebDav
|
||||||
|
@Test
|
||||||
|
public void canGuessMimeType()
|
||||||
|
{
|
||||||
|
AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
|
||||||
|
|
||||||
|
ContentService contentService = (ContentService) ctx.getBean("ContentService");
|
||||||
|
NodeService nodeService = (NodeService) ctx.getBean("NodeService");
|
||||||
|
StoreRef storeRef = nodeService.createStore("workspace", getClass().getName()+UUID.randomUUID());
|
||||||
|
NodeRef rootNodeRef = nodeService.getRootNode(storeRef);
|
||||||
|
NodeRef nodeRef = nodeService.createNode(
|
||||||
|
rootNodeRef,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, getClass().getSimpleName()),
|
||||||
|
ContentModel.TYPE_CONTENT).getChildRef();
|
||||||
|
|
||||||
|
ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
|
||||||
|
// Pre-condition of test is that we're testing with a potentially problematic BackingStoreAwareCacheWriter
|
||||||
|
// rather than a FileContentWriter, which we would expect to work.
|
||||||
|
assertTrue(writer instanceof BackingStoreAwareCacheWriter);
|
||||||
|
|
||||||
|
String content = "This is some content";
|
||||||
|
writer.putContent(content);
|
||||||
|
writer.guessMimetype("myfile.txt");
|
||||||
|
|
||||||
|
assertEquals("text/plain", writer.getMimetype());
|
||||||
|
}
|
||||||
|
|
||||||
private String makeContent()
|
private String makeContent()
|
||||||
{
|
{
|
||||||
|
@@ -25,4 +25,7 @@
|
|||||||
<property name="cache" ref="contentCache"/>
|
<property name="cache" ref="contentCache"/>
|
||||||
<property name="cacheOnInbound" value="true"/>
|
<property name="cacheOnInbound" value="true"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<!-- Override the usual fileContentStore so that the CachingContentStore is used in its place -->
|
||||||
|
<alias name="cachingContentStore" alias="fileContentStore"/>
|
||||||
</beans>
|
</beans>
|
||||||
|
Reference in New Issue
Block a user