0

我有一个允许用户上传文件的应用程序。现在它正在直接上传到文件系统。我将我的数据库设置为使用文件流(在 SQL Server 2008 中)。我有一个输入字段类型为文件的表单。

<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))

我不知道如何获得实际的文件名,也不确定为什么没有得到它。

4

2 回答 2

2

这个论坛帖子可能有正确的答案:

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

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

  2. 在您的“action.cfm”上,使用带有 action="upload" 标记的 CFFILE 将文件保存到您的文件系统。

  3. 使用带有 action="readbinary" 的 CFFILE 标签将上传文件的内容读入一个变量。您可能还想在将上传的文件读入变量后使用 CFFILE 删除它。

  4. 使用 CFQUERY 和 CFQUERYPARAM 来插入文件内容。

于 2013-04-01T17:12:03.573 回答
2

无论出于何种原因,文件的路径默认为:

C:\apps\ColdFusion9\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\neotmp###.tmp.

我们需要查看一些代码来提供更具体的答案。但是要回答您的部分问题...

新上传的文件总是放在服务器临时目录中,并给定一个临时文件名。在您的操作页面上,您必须使用cffile action=upload标记将文件从临时目录移动到所需位置。

动作名称有点误导。它并没有真正上传任何东西。从临时路径可以看出,文件已经上传到服务器了。所做action=upload的只是移动/重命名文件。它还使用文件的详细信息填充CFFILE(或result)结构,例如文件名、文件扩展名、mime 类型等。(有关更多详细信息,请参阅文档。)这些值可用于将文件信息保存到数据库中。

   <cffile action="upload" 
          fileField    = "form.nameOfYourInputField"  
          destination  = "c:\path\to\target\directory"  
          nameConflict = "makeUnique"
          result="fileDetails" /> 

   <cfdump var="#fileDetails#" label="Uploaded File Details">
于 2013-04-01T17:18:57.940 回答