2015-02-12 2 views
4

Я пытаюсь получить файл с URL-адреса автоматической загрузки с использованием cfhttp. Я использую следующий код:Получить файл с автоматической загрузки url в coldfusion

<cfhttp method="get" url="http://www.example.com/getfile" path="E:/" file="abc.csv"> 

В этом случае я указал тип файла, как CSV, так что я могу получить файл, но тип файла может измениться. Я попытался CFHTTP.MIMETYPE получить тип файла и использовать так:

<cfhttp method="get" url="http://www.example.com/getfile"> 
<cffile action="write" file="E:/abc.#listLast(cfhttp.MIMETYPE,'/')#" output="#cfhttp.FileContent#"> 

И это работает для CSV и XML файлов. Но я хочу, чтобы он работал и с файлами Excel.

Пожалуйста, помогите. Спасибо заранее.

+0

Вы пытались установить 'getAsBinary =" Auto "' в теге cfhttp? –

+0

Я могу получить его как двоичный, но все же как получить расширение файла? – Beginner

+0

@cfqueryparam Есть ли способ получить расширение файла? – Beginner

ответ

4
<cfhttp method="get" url="http://www.example.com/getfile"> 
<cfset fileName = listlast(cfhttp["responseHeader"]["content-disposition"],";=")> 
<cffile action="write" file="E:/abc.#fileName#" output="#cfhttp.FileContent#"> 
+1

Почему вы используете два listlasts? Вы можете покрыть его одним списком и указать оба разделителя вместе. Это одно место, которое, к примеру, отличается от раскола java. Кроме того, зачем использовать structfind? 'cfhttp [" responseHeader "] [" Content-Disposition "]' будет служить той же цели, поскольку 'StructFind()' генерирует исключение, если ключ не существует так же, как непосредственно его вызывает. Это семантика, хотя ответ хорошо, но 'listlast (cfhttp [" responseHeader "] [" content-disposition "],"; = ")' достигнет той же цели. –

+0

@cfqueryparam: Спасибо за ваше предложение. Я обновил свой ответ. –

+0

@deepak Спасибо, сработало. :) – Beginner