我正在使用文件上传机制为员工上传文件并将其转换为byte []并将其传递给varBinary(Max)以存储到数据库中。
现在,我要做的是,如果已经为员工上传了任何文件,只需从表中读取并显示文件名即可。我只有一列来存储文件,其类型为VarBinary。
是否可以从VarBinary字段获取所有文件信息?
任何其他方式,请告诉我。
答案 0 :(得分:1)
如果您没有存储文件名,则无法检索它。
(除非文件本身包含其文件名,否则您需要解析blob的内容。)
答案 1 :(得分:0)
如果稍后需要使用文件的名称(以及文件中不属于文件字节数据的任何其他数据),那么您还需要保存该数据。我建议为文件名添加一个列,可能是一个列的类型(mime类型或类似的东西,以便正确地将其发送回客户端的浏览器等),甚至可能是一个大小的列您不必为每个文件动态计算(在显示文件网格时非常有用,并且不想触摸填充网格的查询中的大blob字段)。
尽量避免使用文件名进行系统内部标识。允许用户按名称搜索文件,选择它等等是很好的。但是当实际向服务器发出请求以显示文件时,最好使用来自的简单整数主键。该表实际识别它。 (另一方面,在文件名列上放置一个唯一约束可能是个好主意。)
如果您还需要向用户显示文件的帮助,您可能希望采用尝试的方法,以便从数据库显示图像。基本上它涉及拥有一个资源(通常是.aspx页面,但也可能是HttpHandler
),它接受文件ID作为查询字符串参数并输出文件。
此资源没有UI(除了Page指令之外的.aspx中删除所有内容)并会手动操作响应标头(这是您从文件类型中设置内容类型的位置) ,将字节流写入客户端,并结束响应。从客户的角度来看,类似~/MyContent/MyFile.aspx?fileID=123
的内容 文件。 (您可以向浏览器建议一个文件名,以便在响应标题中保存,您可能希望对文件的存储名称进行保存。)
对于如何使用图像进行此操作,quick tutorials(已有几年历史,它已经存在了一段时间)并不缺乏。请记住,如果它是图像或任何其他类型的文件,那么与服务器的观点基本上没有区别。所有服务器需要做的是在响应头中发送类型并将文件的字节写入客户端。客户端如何处理文件取决于浏览器。在绝大多数情况下,浏览器将知道该做什么(显示图像,通过插件显示PDF,保存.doc等)。