If you have used Document REST Services you most likely have realized that downloading any content from an object return a “document”/”response” + dot + file extension.
You can check William Zhou’s answer here:
This had been discussed in the initial implementation but hadn’t been implemented since Content-Disposition response header is neither mandatory nor handled by all HTTP clients. Besides, it has some overhead to map the format/mime to a filename extension. But I think it has values helping for the download experience. It is appreciated if you can file a feature request CR so that we can discuss this with the product manager.
I’ve alredy raised a SR to support in order to get OpenText to consider adding this “feature”.
However, if you can’t/don’t want to wait, just “extend” com.emc.documentum.rest.controller.ContentMediaController adding the following line to the getContent method just before returning the response:
headers.setContentDispositionFormData("attachment", (String)co.getAttributeByName("object_name"));
and you’re good to go.
Using object name as file name seems not to be a good idea – we constantly facing with following challenges:
* sometime customers want to generate object names according to other business data
* in many cases 255 bytes are not enough for file names – so, most our object names do not contain extension part
and I implemented following algorithm:
private static String makeValidName(String fileName) { StringBuilder nameBuilder = new StringBuilder(fileName.length()); for (char c : fileName.toCharArray()) { if (DfFile.isValidCharForFileName(c)) { nameBuilder.append(c); } } return nameBuilder.toString(); } public static String makeFileName(String objectName, String extension) { objectName = makeValidName(objectName); if (StringUtils.isNotBlank(extension)) { if (!extension.startsWith(".")) { extension = "." + extension; } } int maxLength = 255; if (StringUtils.isNotBlank(extension)) { maxLength -= extension.length(); } StringBuilder nameBuilder = new StringBuilder(); int end = objectName.length(); if (StringUtils.isNotBlank(extension)) { if (StringUtils.endsWithIgnoreCase(objectName, extension)) { end -= extension.length(); } } if (StringUtils.isNotBlank(objectName)) { for (int i = 0; i < Math.min(end, maxLength); i++) { nameBuilder.append(objectName.charAt(i)); } } if (nameBuilder.length() == 0) { nameBuilder.append("content"); } if (StringUtils.isNotBlank(extension)) { nameBuilder.append(extension); } return nameBuilder.toString(); }LikeLiked by 1 person