我有一个允许用户上传文件的应用程序。现在它直接上传到文件系统。我将我的数据库设置为使用filestream(在SQL Server 2008中)。我有一个输入字段类型为file的表单。
<input type="file" name="ul_path1" id="ul_path1">
允许用户选择文件。然后我尝试使用所选的文件名来执行查询以将文件插入到数据库中。
<cfquery datasource=#ODSN# name="upFiles">
insert into redbook_uploads
'#session.buildno#', '#form.ul_path1#', Cast('#form.ul_path1#' As varbinary(max))
</cfquery>
但是我在#form.u1_path1#之前收到错误,并在错误消息中将SQL语句显示为
insert into redbook_uploads '009', 'C:\apps\ColdFusion9\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\neotmp7306602622243140924.tmp', Cast('C:\apps\ColdFusion9\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\neotmp7306602622243140924.tmp' As varbinary(max))
应该是:
insert into redbook_uploads '009', 'C:\users\username\file.pdf', Cast('C:\users\username\file.pdf' As varbinary(max))
我无法弄清楚如何获取实际的文件名,我不知道为什么它没有得到它。
答案 0 :(得分:2)
This forum post可能有正确答案:
以下是上传文件并将其存储在数据库中的基本步骤。
使用包含文件标记的表单创建页面。此表单将提交到“action.cfm”页面。请注意.cfm页面的名称并不重要,'action.cfm'就是一个例子。
在'action.cfm'上使用带有action =“upload”标签的CFFILE将文件保存到文件系统。
使用带有action =“readbinary”的CFFILE标记将上载文件的内容读入变量。在读入变量后,您可能还想使用CFFILE删除上传的文件。
- 醇>
使用CFQUERY和CFQUERYPARAM插入文件标记。
答案 1 :(得分:2)
无论出于何种原因,该文件的路径默认为:
C:\apps\ColdFusion9\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\neotmp###.tmp.
我们需要看一些代码来提供更具体的答案。但要回答你的部分问题......
新上传的文件始终放在服务器临时目录中,并提供临时文件名。在操作页面上,必须使用cffile action=upload
标记将文件从临时目录移动到所需位置。
动作名称有点误导。它并不真正上传任何东西。从临时路径可以看出,该文件已经上传到服务器。所有action=upload
都是移动/重命名文件。它还会在CFFILE
(或result
)结构中填充有关文件的详细信息,例如名称,文件扩展名,mime类型等。 (有关更多详细信息,请参阅the documentation。)这些值可用于将文件信息保存到数据库。
<cffile action="upload"
fileField = "form.nameOfYourInputField"
destination = "c:\path\to\target\directory"
nameConflict = "makeUnique"
result="fileDetails" />
<cfdump var="#fileDetails#" label="Uploaded File Details">