2013-04-01 58 views
0

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

<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可能具有正确答案:

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

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

  2. 在'action.cfm'上使用CFFILE和action =“upload”标记将文件保存到文件系统。

  3. 使用action =“readbinary”的CFFILE标签将上传文件的内容读入变量。您可能还希望使用CFFILE将已上载的文件读入变量后删除。

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

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"> 
+0

好了,什么情况是,用户选择其计算机上的文件与

+0

*当它应该是:'C:\ users \ username \ file.pdf' *不,它不应该。服务器无法访问用户的计算机,因此存储远程路径不会有好处。您想要保存*在服务器*上存储的文件的路径。要做到这一点,请先用cffile上传它。然后在'insert'语句中使用服务器变量:'serverDirectory'和'serverFile'。 – Leigh

+0

我们正试图避免将文件直接上传到系统/服务器。这就是我们试图使用文件流的原因。但我想我可以上传它,然后使用服务器变量将其放入数据库,然后删除该文件。这看起来像额外的步骤。 –