使用 Coldfusion 从 Web url 上传文件
Upload Files from web url using Coldfusion
我一直允许用户通过这样的在线表单上传文件:
<form action="upload.htm" enctype="multipart/form-data" name="upload_form" method="post">
<input type="file" name="upfile">
<input type="submit" name="upload" value="Upload Photos">
</form>
然后在后端 cffile 将上传文件:
<cffile action="upload" destination="#currentpath#" accept="image/jpeg, image/gif, image/png" fileField="form.upfile" nameconflict="makeunique">
现在我想实现自动化,这样图像文件就不必位于用户的计算机中,而是来自 Web 目标,例如http://www.sample.com/images/myimage.jpg 而不是 c:/images/myimage.jpg
我试过这个:
<cfhttp method="get" url="http://www.example.com/images/myimage.jpg" resolveurl="Yes" throwOnError="Yes">
<cfif cfhttp.mimeType eq "image/jpeg">
<cfset currentpath = expandpath('/test/')>
<cffile action="upload" destination="#currentpath#" accept="image/jpeg, image/gif, image/png" fileField="#cfhttp.fileContent#" nameconflict="makeunique">
</cfif>
但是,它给我一个错误:
Invalid content type: ''. The files upload action requires forms to
use enctype="multipart/form-data"
我没有使用表单上传,但它似乎需要一个表单域。
所以我尝试了这个:
<cfhttp method="get" url="http://www.example.com/images/myimage.jpg" resolveurl="Yes" throwOnError="Yes">
<cfif cfhttp.mimeType eq "image/jpeg">
<cfset currentpath = expandpath('/test/')>
<cffile action="write" output="#cfhttp.fileContent#" file="#currentpath#/someimage.jpg">
</cfif>
这个写了一个 "file" 叫做 someimage.jpg 但输出不是一个 jpg 文件,而是一些无法识别的东西。使用 cffile "write",它不允许检查图像类型或相同的文件名。
感谢任何帮助。提前谢谢你。
假设调用成功,当前代码可能正在检索 and/or 将响应保存为文本,而不是二进制,这会损坏图像。为确保获得二进制图像,请使用 getAsBinary="yes"
.
话虽如此,直接在 cfhttp 调用中将响应保存到文件会更简单:
<cfhttp url="http://www.example.com/images/myimage.jpg"
method="get"
getAsBinary="yes"
path="#currentpath#"
file="someimage.jpg"
resolveurl="Yes"
throwOnError="Yes" />
我一直允许用户通过这样的在线表单上传文件:
<form action="upload.htm" enctype="multipart/form-data" name="upload_form" method="post">
<input type="file" name="upfile">
<input type="submit" name="upload" value="Upload Photos">
</form>
然后在后端 cffile 将上传文件:
<cffile action="upload" destination="#currentpath#" accept="image/jpeg, image/gif, image/png" fileField="form.upfile" nameconflict="makeunique">
现在我想实现自动化,这样图像文件就不必位于用户的计算机中,而是来自 Web 目标,例如http://www.sample.com/images/myimage.jpg 而不是 c:/images/myimage.jpg
我试过这个:
<cfhttp method="get" url="http://www.example.com/images/myimage.jpg" resolveurl="Yes" throwOnError="Yes">
<cfif cfhttp.mimeType eq "image/jpeg">
<cfset currentpath = expandpath('/test/')>
<cffile action="upload" destination="#currentpath#" accept="image/jpeg, image/gif, image/png" fileField="#cfhttp.fileContent#" nameconflict="makeunique">
</cfif>
但是,它给我一个错误:
Invalid content type: ''. The files upload action requires forms to use enctype="multipart/form-data"
我没有使用表单上传,但它似乎需要一个表单域。
所以我尝试了这个:
<cfhttp method="get" url="http://www.example.com/images/myimage.jpg" resolveurl="Yes" throwOnError="Yes">
<cfif cfhttp.mimeType eq "image/jpeg">
<cfset currentpath = expandpath('/test/')>
<cffile action="write" output="#cfhttp.fileContent#" file="#currentpath#/someimage.jpg">
</cfif>
这个写了一个 "file" 叫做 someimage.jpg 但输出不是一个 jpg 文件,而是一些无法识别的东西。使用 cffile "write",它不允许检查图像类型或相同的文件名。
感谢任何帮助。提前谢谢你。
假设调用成功,当前代码可能正在检索 and/or 将响应保存为文本,而不是二进制,这会损坏图像。为确保获得二进制图像,请使用 getAsBinary="yes"
.
话虽如此,直接在 cfhttp 调用中将响应保存到文件会更简单:
<cfhttp url="http://www.example.com/images/myimage.jpg"
method="get"
getAsBinary="yes"
path="#currentpath#"
file="someimage.jpg"
resolveurl="Yes"
throwOnError="Yes" />