mirror of
https://github.com/Alfresco/alfresco-transform-core.git
synced 2025-06-30 18:14:51 +00:00
MNT-24883 office pdf render header-fix
This commit is contained in:
parent
0c534f1081
commit
f6d03a18a2
@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.transform.base.fs;
|
package org.alfresco.transform.base.fs;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.Part;
|
||||||
import org.alfresco.transform.base.logging.LogEntry;
|
import org.alfresco.transform.base.logging.LogEntry;
|
||||||
import org.alfresco.transform.common.ExtensionService;
|
import org.alfresco.transform.common.ExtensionService;
|
||||||
import org.alfresco.transform.exceptions.TransformException;
|
import org.alfresco.transform.exceptions.TransformException;
|
||||||
@ -43,6 +44,7 @@ import java.io.OutputStream;
|
|||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||||
import static org.alfresco.transform.common.ExtensionService.getExtensionForMimetype;
|
import static org.alfresco.transform.common.ExtensionService.getExtensionForMimetype;
|
||||||
@ -65,8 +67,23 @@ public class FileManager
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String extension = "."+getExtensionForMimetype(sourceMimetype);
|
|
||||||
File file = TempFileProvider.createTempFile("source_", extension);
|
String extension = "." + getExtensionForMimetype(sourceMimetype);
|
||||||
|
File file;
|
||||||
|
if (request != null && request.getParts() != null) {
|
||||||
|
String submittedFileName = request.getParts().stream()
|
||||||
|
.map(Part::getSubmittedFileName)
|
||||||
|
.filter(name -> name != null && extension.contains(".doc"))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
file = (submittedFileName != null)
|
||||||
|
? TempFileProvider.createTempDirForDocFile(submittedFileName)
|
||||||
|
: TempFileProvider.createTempFile("source_", extension);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file = TempFileProvider.createTempFile("source_", extension);
|
||||||
|
}
|
||||||
Files.copy(inputStream, file.toPath(), REPLACE_EXISTING);
|
Files.copy(inputStream, file.toPath(), REPLACE_EXISTING);
|
||||||
if (request != null)
|
if (request != null)
|
||||||
{
|
{
|
||||||
@ -81,6 +98,27 @@ public class FileManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static File createSourceFileWithSameName(HttpServletRequest request, String sourceFileName, InputStream inputStream, String sourceMimetype) {
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File file = TempFileProvider.createTempDirForDocFile(sourceFileName);
|
||||||
|
Files.copy(inputStream, file.toPath(), REPLACE_EXISTING);
|
||||||
|
if (request != null)
|
||||||
|
{
|
||||||
|
request.setAttribute(SOURCE_FILE, file);
|
||||||
|
}
|
||||||
|
LogEntry.setSource(file.getName(), file.length());
|
||||||
|
return file;
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new TransformException(INSUFFICIENT_STORAGE, "Failed to store the source file", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static File createTargetFile(HttpServletRequest request, String sourceMimetype, String targetMimetype)
|
public static File createTargetFile(HttpServletRequest request, String sourceMimetype, String targetMimetype)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -219,6 +257,27 @@ public class FileManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File createTempDirForDocFile(String sourceFileName)
|
||||||
|
{
|
||||||
|
final File alfrescoTempDirectory = getTempDir();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
UUID uuid = UUID.randomUUID();
|
||||||
|
final File tempDir = new File(alfrescoTempDirectory, uuid.toString());
|
||||||
|
if (!tempDir.exists() && !tempDir.mkdirs() && !tempDir.exists())
|
||||||
|
{
|
||||||
|
throw new RuntimeException("Failed to create temp directory: " + tempDir);
|
||||||
|
}
|
||||||
|
return new File(tempDir, sourceFileName);
|
||||||
|
// return File.createTempFile(sourceFileName, ".docx", tempDir);
|
||||||
|
// return File.createTempFile(sourceFileName, ".docx", alfrescoTempDirectory);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException("Failed to created temp file: \n file: " + sourceFileName +"\n", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static File getTempDir()
|
private static File getTempDir()
|
||||||
{
|
{
|
||||||
final String dirName = "Alfresco";
|
final String dirName = "Alfresco";
|
||||||
|
@ -68,6 +68,7 @@ abstract class ProcessHandler extends FragmentHandler
|
|||||||
private static final List<String> NON_TRANSFORM_OPTION_REQUEST_PARAMETERS = Arrays.asList(SOURCE_EXTENSION,
|
private static final List<String> NON_TRANSFORM_OPTION_REQUEST_PARAMETERS = Arrays.asList(SOURCE_EXTENSION,
|
||||||
TARGET_EXTENSION, TARGET_MIMETYPE, SOURCE_MIMETYPE, DIRECT_ACCESS_URL);
|
TARGET_EXTENSION, TARGET_MIMETYPE, SOURCE_MIMETYPE, DIRECT_ACCESS_URL);
|
||||||
|
|
||||||
|
protected String sourceFileName=null;
|
||||||
protected final String sourceMimetype;
|
protected final String sourceMimetype;
|
||||||
protected final String targetMimetype;
|
protected final String targetMimetype;
|
||||||
private final Map<String, String> transformOptions;
|
private final Map<String, String> transformOptions;
|
||||||
@ -92,6 +93,22 @@ abstract class ProcessHandler extends FragmentHandler
|
|||||||
this.customTransformers = customTransformers;
|
this.customTransformers = customTransformers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProcessHandler(String sourceFileName,String sourceMimetype, String targetMimetype, Map<String, String> transformOptions,
|
||||||
|
String reference, TransformServiceRegistry transformRegistry, TransformerDebug transformerDebug,
|
||||||
|
ProbeTransform probeTransform, CustomTransformers customTransformers)
|
||||||
|
{
|
||||||
|
this.sourceFileName = sourceFileName;
|
||||||
|
this.sourceMimetype = sourceMimetype;
|
||||||
|
this.targetMimetype = targetMimetype;
|
||||||
|
this.transformOptions = cleanTransformOptions(transformOptions);
|
||||||
|
this.reference = reference;
|
||||||
|
|
||||||
|
this.transformRegistry = transformRegistry;
|
||||||
|
this.transformerDebug = transformerDebug;
|
||||||
|
this.probeTransform = probeTransform;
|
||||||
|
this.customTransformers = customTransformers;
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<String, String> cleanTransformOptions(Map<String, String> requestParameters)
|
private static Map<String, String> cleanTransformOptions(Map<String, String> requestParameters)
|
||||||
{
|
{
|
||||||
Map<String, String> transformOptions = new HashMap<>(requestParameters);
|
Map<String, String> transformOptions = new HashMap<>(requestParameters);
|
||||||
|
@ -190,7 +190,7 @@ public class TransformHandler
|
|||||||
ProbeTransform probeTransform)
|
ProbeTransform probeTransform)
|
||||||
{
|
{
|
||||||
TransformReply reply = createBasicTransformReply(request);
|
TransformReply reply = createBasicTransformReply(request);
|
||||||
new ProcessHandler(request.getSourceMediaType(), request.getTargetMediaType(),
|
new ProcessHandler(request.getSourceFileName(),request.getSourceMediaType(), request.getTargetMediaType(),
|
||||||
request.getTransformRequestOptions(),"unset", transformRegistry,
|
request.getTransformRequestOptions(),"unset", transformRegistry,
|
||||||
transformerDebug, probeTransform, customTransformers)
|
transformerDebug, probeTransform, customTransformers)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ package org.alfresco.transform.base.transform;
|
|||||||
import org.alfresco.transform.base.TransformManager;
|
import org.alfresco.transform.base.TransformManager;
|
||||||
import org.alfresco.transform.base.fs.FileManager;
|
import org.alfresco.transform.base.fs.FileManager;
|
||||||
import org.alfresco.transform.base.util.OutputStreamLengthRecorder;
|
import org.alfresco.transform.base.util.OutputStreamLengthRecorder;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -53,6 +54,7 @@ public class TransformManagerImpl implements TransformManager
|
|||||||
private OutputStreamLengthRecorder outputStreamLengthRecorder;
|
private OutputStreamLengthRecorder outputStreamLengthRecorder;
|
||||||
private String sourceMimetype;
|
private String sourceMimetype;
|
||||||
private String targetMimetype;
|
private String targetMimetype;
|
||||||
|
private String sourceFileName;
|
||||||
private File sourceFile;
|
private File sourceFile;
|
||||||
private File targetFile;
|
private File targetFile;
|
||||||
private boolean keepTargetFile;
|
private boolean keepTargetFile;
|
||||||
@ -157,9 +159,10 @@ public class TransformManagerImpl implements TransformManager
|
|||||||
}
|
}
|
||||||
createSourceFileCalled = true;
|
createSourceFileCalled = true;
|
||||||
|
|
||||||
if (sourceFile == null)
|
if (sourceFile == null) {
|
||||||
{
|
sourceFile = StringUtils.isEmpty(sourceFileName)
|
||||||
sourceFile = FileManager.createSourceFile(request, inputStream, sourceMimetype);
|
? FileManager.createSourceFile(request, inputStream, sourceMimetype)
|
||||||
|
: FileManager.createSourceFileWithSameName(request, sourceFileName, inputStream, sourceMimetype);
|
||||||
}
|
}
|
||||||
return sourceFile;
|
return sourceFile;
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@ public class TransformRequest implements Serializable
|
|||||||
private int schema;
|
private int schema;
|
||||||
private Map<String, String> transformRequestOptions = new HashMap<>();
|
private Map<String, String> transformRequestOptions = new HashMap<>();
|
||||||
private InternalContext internalContext;
|
private InternalContext internalContext;
|
||||||
|
private String sourceFileName;
|
||||||
|
|
||||||
// regions [Accessors]
|
// regions [Accessors]
|
||||||
public String getRequestId()
|
public String getRequestId()
|
||||||
@ -160,6 +161,14 @@ public class TransformRequest implements Serializable
|
|||||||
this.internalContext = internalContext;
|
this.internalContext = internalContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSourceFileName() {
|
||||||
|
return sourceFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourceFileName(String sourceFileName) {
|
||||||
|
this.sourceFileName = sourceFileName;
|
||||||
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user