Upload Files from web url using Coldfusion
我一直允许用户通过在线表格上传文件,如下所示:
1 2 3 4 | <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将上传文件:
1 | <cffile action="upload" destination="#currentpath#" accept="image/jpeg, image/gif, image/png" fileField="form.upfile" nameconflict="makeunique"> |
现在我想进行自动化,以便图像文件不必位于用户的计算机中,而是位于网络目的地,例如 http://www.sample.com/images/myimage.jpg而不是c:/images/myimage.jpg
我试过这个:
1 2 3 4 5 | <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"
我没有使用表单上传,但似乎需要一个表单字段。
所以我尝试了这个:
1 2 3 4 5 | <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> |
这个写出一个名为someimage.jpg的"文件",但输出不是jpg文件,而是无法识别的东西。 使用cffile"write",它不允许检查图像类型或相同的文件名。
任何帮助表示赞赏。 先感谢您。
假设调用成功,当前代码可能正在检索和/或保存响应为文本,而不是二进制,这将破坏图像。 要确保返回二进制图像,请使用
话虽如此,在cfhttp调用中直接保存对文件的响应更简单:
1 2 3 4 5 6 7 | <cfhttp url="http://www.example.com/images/myimage.jpg" method="get" getAsBinary="yes" path="#currentpath#" file="someimage.jpg" resolveurl="Yes" throwOnError="Yes" /> |