Sql server 2008 ColdFusion 9和文件流

Sql server 2008 ColdFusion 9和文件流,sql-server-2008,coldfusion,filestream,coldfusion-9,Sql Server 2008,Coldfusion,Filestream,Coldfusion 9,我有一个允许用户上传文件的应用程序。现在它直接上传到文件系统。我已将数据库设置为使用filestream(在SQLServer2008中)。我有一个输入字段类型为文件的表单 <input type="file" name="ul_path1" id="ul_path1"> 何时应该: insert into redbook_uploads '009', 'C:\users\username\file.pdf', Cast('C:\users\username\file.pdf' A

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

<input type="file" name="ul_path1" id="ul_path1">
何时应该:

insert into redbook_uploads '009', 'C:\users\username\file.pdf', Cast('C:\users\username\file.pdf' As varbinary(max))
我不知道如何得到实际的文件名,也不知道为什么它没有得到它

可能有正确的答案:

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

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

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

  • 使用带有action=“readbinary”的CFFILE标记将上传文件的内容读取到变量中。您可能还希望在上传的文件读入变量后使用CFFILE删除该文件

  • 使用CFQUERY和CFQUERYPARAM插入文件内容

  • 可能有正确的答案:

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

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

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

  • 使用带有action=“readbinary”的CFFILE标记将上传文件的内容读取到变量中。您可能还希望在上传的文件读入变量后使用CFFILE删除该文件

  • 使用CFQUERY和CFQUERYPARAM插入文件内容

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

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

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

    新上载的文件始终放置在服务器临时目录中,并提供临时文件名。在操作页面上,必须使用
    cffile action=upload
    标记将文件从临时目录移动到所需位置

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

    <cfquery datasource=#ODSN# name="upFiles">
    insert into redbook_uploads 
    '#session.buildno#', '#form.ul_path1#', Cast('#form.ul_path1#' As varbinary(max))
    </cfquery>
    
       <cffile action="upload" 
              fileField    = "form.nameOfYourInputField"  
              destination  = "c:\path\to\target\directory"  
              nameConflict = "makeUnique"
              result="fileDetails" /> 
    
       <cfdump var="#fileDetails#" label="Uploaded File Details">
    
    
    
    无论出于何种原因,文件的路径默认为:

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

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

    新上载的文件始终放置在服务器临时目录中,并提供临时文件名。在操作页面上,必须使用
    cffile action=upload
    标记将文件从临时目录移动到所需位置

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

    <cfquery datasource=#ODSN# name="upFiles">
    insert into redbook_uploads 
    '#session.buildno#', '#form.ul_path1#', Cast('#form.ul_path1#' As varbinary(max))
    </cfquery>
    
       <cffile action="upload" 
              fileField    = "form.nameOfYourInputField"  
              destination  = "c:\path\to\target\directory"  
              nameConflict = "makeUnique"
              result="fileDetails" /> 
    
       <cfdump var="#fileDetails#" label="Uploaded File Details">
    
    
    
    请与我们共享相关代码…请与我们共享相关代码…好的,那么发生的情况是用户在其计算机上选择了一个文件,该文件应该是:
    C:\users\username\file.pdf
    不应该。服务器无法访问用户的计算机,因此存储远程路径没有任何好处。您希望保存存储在服务器上的文件的路径。要做到这一点,先用cffile上传它。然后在
    insert
    语句中使用服务器变量:
    serverDirectory
    serverFile
    。我们试图避免将文件直接上载到系统/服务器。这就是我们尝试使用文件流的原因。但我想我可以上传它,然后使用服务器变量将其放入数据库,然后删除文件。这看起来像是额外的步骤。(编辑)没有办法通过web应用程序afaik实现这一点。出于安全原因,服务器不能仅访问用户计算机上的文件。用户必须明确选择自己发送文件,即上传文件。这意味着一个临时文件。但是有一行清理并没有什么大不了的:)好的,所以发生的事情是用户在计算机上选择了一个文件,并且在它应该是的时候:
    C:\users\username\file.pdf
    不应该。服务器无法访问用户的计算机,因此存储远程路径没有任何好处。您希望保存存储在服务器上的文件的路径。要做到这一点,先用cffile上传它。然后在
    insert
    语句中使用服务器变量:
    serverDirectory
    serverFile
    。我们试图避免将文件直接上载到系统/服务器。这就是我们尝试使用文件流的原因。但我想我可以上传它,然后使用服务器变量将其放入数据库,然后删除文件。这看起来像是额外的步骤。(编辑)没有办法通过web应用程序afaik实现这一点。出于安全原因,服务器不能仅访问用户计算机上的文件