Я пытаюсь получить изображение с URL-адреса и сохранить его на локальном компьютере, используя cfhttp, как показано ниже.

<cfhttp
    timeout="45"
    throwonerror="false"
    url="http://domain/images/cme_recorder_on.png"
    method="get"
    useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
    getasbinary="yes"
    result="local.objGet"
>

<cfset myImage = ImageNew(local.objGet.FileContent)>

<cfif (FindNoCase( "200", local.objGet.Statuscode ) AND FindNoCase( "image", local.objGet.Responseheader["Content-Type"]
        ))>   
      <cfoutput>this is an image</cfoutput>
       <cffile file="#myImage#" action="write" output="c:\test_myImage.jpg"> 
<cfelse>
     <cfabort>   
</cfif>

Я попытался использовать cffile write, чтобы сохранить изображение на локальном компьютере. Я не вижу, чтобы изображение было записано в c :. Это правильный способ сохранить образ на диск? Спасибо всем

1
user747291 16 Июл 2014 в 22:58
1
Попробуйте поменять атрибуты файла и вывода в cffile. атрибут файла должен быть именем файла.
 – 
WillardSolutions
16 Июл 2014 в 23:24
Я пробовал переключать два, все еще не вижу записываемого изображения.
 – 
user747291
16 Июл 2014 в 23:40
Возможно, вы не проверяете C:\ сервера coldfusion. Ваш код отлично работает для условий. Включите функцию Imagewrite, предложенную @Sean, вместо cffile и проверьте образ, созданный в C:\ сервера coldfusion.
 – 
Gaurav S
17 Июл 2014 в 05:35
1
Отображается ли текст «это изображение»?
 – 
Dan Bracuk
17 Июл 2014 в 06:06
Почему бы просто не сделать сохранение в вызове cfhttp? См. атрибуты file и path тега. Хотя, как упомянул Шон, вы все равно должны проверить статус http-вызова, чтобы убедиться, что он прошел успешно.
 – 
Leigh
17 Июл 2014 в 19:54

2 ответа

Лучший ответ

Используйте imageWrite() https://wikidocs.adobe.com/wiki/display/coldfusionen / ImageWrite

Итак, для вашего примера вместо использования cffile вы должны использовать

<cfset imageWrite(myImage, "c:\test_myImage.jpg") />
2
Sean Coyne 16 Июл 2014 в 23:55
Это тоже не пишет!
 – 
user747291
17 Июл 2014 в 00:04
1
Хорошо, тогда вам нужно проверить свой код. Вы пишете это в рамках условия. Вам вернут 200? Вы получаете изображение в заголовке типа контента? Если оба из них на самом деле верны, вы не заставите его писать. ImageWrite обязательно запишет изображение, прочитанное из запроса CFHTTP и проанализированное как изображение с помощью ImageNew(), так что еще раз проверьте свой код. Или обновите выше, чтобы указать, что вы делаете сейчас. Упростите свой пример. Уберите состояние, для начала.
 – 
Sean Coyne
17 Июл 2014 в 00:06

Источником для imageNew может быть URL, поэтому в этом случае нет необходимости в cfhttp.

<cfset newImage = imageNew( "http://domain/images/cme_recorder_on.png" )>
<cfset imageWrite(newImage, "c:\test_myImage.jpg")>
4
Edy Ionescu 17 Июн 2015 в 19:09
Истинный. Хотя, поскольку в конечном итоге речь идет о выполнении http-запроса, cfhttp здесь может подойти лучше. Он предоставляет гораздо больше деталей о запросе в случае возникновения проблем (ошибка 404, тайм-аут и т. д.). Кроме того, он может сохранять содержимое непосредственно в файл: никаких дополнительных функций не требуется. Однако, если им нужно сначала манипулировать изображением, то использование ImageNew будет иметь больше смысла.
 – 
Leigh
18 Июн 2015 в 23:58