2015-12-16 2 views
1

Любопытно, что это.Использование cfimage для отображения файла, который не имеет расширения

Я работаю над процессом, который создает файлы PDF, объединяя данные из разных источников. Последний фрагмент этого процесса, который мне нужно завершить, заключается в слиянии в файлах изображений.

Это на самом деле довольно просто, но проблема заключается в том, что файлы изображений не хранятся с расширениями файлов. Локально я могу изменить имя файла, но в производстве это не вариант.

Так, так как имя файла выглядит следующим образом: B71637CB-A49C-0653-EF813918736BDEB7

Это не будет работать:

<cfimage action="writeTobrowser" source="#FilePath#> 

То же самое с

<img src="#FilePath#">. 

Итак, любые идеи о том, как я может обойти это? Вот код в контексте:

<cfdocument format="PDF" name="report" filename="#fileToDownloadimage#" overwrite="yes"> 
    <cfdocumentsection> 
     <cfimage action="writeTobrowser" source="#FilePath#.jpg"> 
    </cfdocumentsection> 
</cfdocument> 
+0

WriteToBrowser только что генерирует тег html ''. Попробуйте использовать простой тег '' вместо cfimage. – Leigh

+0

Просто, чтобы добавить к этому, раньше я сталкивался с подобной проблемой. Решение невероятно просто. В ColdFusion 10 и далее существует функция FileGetMimeType, которая считывает фактическое содержимое файла, чтобы определить его расширение. https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-eg/filegetmimetype.html – TRose

ответ

2

Если вам нужно вставлять изображения в PDF-документ, попробуйте Возможности встроенных изображений языка HTML:

<cfset fileLocation   = "/path/to/images/B71637CB-A49C-0653-EF813918736BDEB7"> 
<cfset imageContent   = fileReadBinary(fileLocation)> 
<cfset imageContentAsBase64 = toBase64(imageContent)> 

<cfoutput> 
    <img src="data:image/jpeg;base64, #imageContentAsBase64#" /> 
</cfoutput> 
+0

Ох .. это хороший совет! Я забыл об этом синтаксисе. милый Алекс. –

+0

Алекс - ты уверен, что работает с CFDOCUMENT? Я имею в виду - вы его протестировали или вы предлагаете попробовать? –

+0

Поскольку это действительный XHTML, я не понимаю, почему он не будет работать с 'cfdocument'. – Alex

1

Вы можете попробовать создать страницу CFM, которая выводит контент, используя cfcontent как в:

<cfcontent type="image/jpg" file="path/#fielpath#"> 

Тогда вы бы вы включили ЧТО CFM страницу в качестве источника для вашего изображения как в

<img src="myFancyImageOuputer.cfm?image=#filepath#"> 

Это должно работать, но это может потребовать проб и ошибок. :)

Ray имеет некоторые дополнительные советы здесь:

http://www.raymondcamden.com/2007/09/14/Serving-up-CFIMages-via-Image-Tags-and-a-NonCF-Friday-contest

+0

(Edit) Правда, но мне интересно, действительно ли им нужно cfimage, поскольку в итоге он просто генерирует html ' 'тег. @MrJdac - Что произойдет, если вы вместо этого используете ''? Работал отлично для меня в CF11. – Leigh

+0

Ответ Ли - Алекс, может быть, вы имели в виду здесь, а? –

+0

Ну, я считал base64, но .. не был уверен, насколько велики их образы. Мне просто интересно, может ли базовый тег сделать трюк, так как он все серверный (и, похоже, работает без указания типа mime). – Leigh

3

Так вот что закончил работу:

<cfdocument format="PDF" name="report" filename="#fileToDownloadimage#" overwrite="yes"> 
    <cfdocumentsection> 
     <cfset fileObject = fileReadBinary('#FilePath#') /> 
     <cfset imageObject = imageNew(fileObject) /> 
     <cfimage action="writeTobrowser" source="#imageObject#"> 
    </cfdocumentsection> 
</cfdocument> 

Ответ Alex's заставил меня идти по правильному пути, поэтому я совершенно счастлив оставить это место на месте, потому что я не был рядом с этим!