ColdFusion 9和文件流

时间:2013-04-01 16:14:10

标签: sql-server-2008 coldfusion filestream coldfusion-9

我有一个允许用户上传文件的应用程序。现在它直接上传到文件系统。我将我的数据库设置为使用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))

我无法弄清楚如何获取实际的文件名,我不知道为什么它没有得到它。

2 个答案:

答案 0 :(得分:2)

This forum post可能有正确答案:

  

以下是上传文件并将其存储在数据库中的基本步骤。

     
      
  1. 使用包含文件标记的表单创建页面。此表单将提交到“action.cfm”页面。请注意.cfm页面的名称并不重要,'action.cfm'就是一个例子。

  2.   
  3. 在'action.cfm'上使用带有action =“upload”标签的CFFILE将文件保存到文件系统。

  4.   
  5. 使用带有action =“readbinary”的CFFILE标记将上载文件的内容读入变量。在读入变量后,您可能还想使用CFFILE删除上传的文件。

  6.   
  7. 使用CFQUERY和CFQUERYPARAM插入文件标记。

  8.   

答案 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">