2011-03-15 99 views
0

我正在使用文件上传机制上传文件给员工并将其转换为byte []并将其传递给varBinary(Max)以存储到数据库中。文件上传并从数据库中读取

现在我所要做的就是,如果已经为员工上传任何文件,只需从表格中读取并显示文件名即可。我只有一列存储一个文件,并且是VarBinary类型的。

是否可以从VarBinary字段获取所有文件信息?

任何其他方式,请让我知道。

回答

1

如果您不存储文件名,则无法检索它。

(除非该文件本身包含它的文件名在这种情况下,你需要解析BLOB的内容。)

0

如果文件名(约这不是文件的一部分的文件中的任何其他数据字节数据)需要稍后使用,那么您还需要保存该数据。我建议为文件名添加一列,也许是为它的类型(MIME类型或类似的东西,以便正确地将其发送回客户端的浏览器等),也许甚至一个大小,所以你不必计算每个文件的实时(在显示文件网格时有用,并且不想触摸填充网格的查询中的大块区域)。

尽量避免使用文件名来实现系统内部身份识别。允许用户按名称搜索文件,选择文件等是很好的。但是,实际向服务器发送请求以显示文件时,最好使用表中的简单整数主键来真正标识它。 (在附注中,对文件名列设置一个唯一约束可能是一个好主意。)

如果您还需要帮助将文件显示给用户,那么您可能需要采取尝试的方法并且显示来自数据库的图像是真实的。基本上它涉及到一个资源(通常是一个.aspx页面,但也可以是HttpHandler),它接受文件ID作为查询字符串参数并输出文件。

这个资源没有UI(除了Page指令除去.aspx中的所有内容)并手动操作响应头(这是你从文件类型设置内容类型的地方),写入字节流给客户,并结束响应。从客户端的角度来看,~/MyContent/MyFile.aspx?fileID=123就是,这个文件就是。 (您可以在浏览器中为保存目的建议一个文件名称,您可能需要使用该文件的存储名称进行保存)。

不存在quick tutorials(几年前,它已经围绕一段时间)如何与图像做到这一点。请记住,如果它是一个图像或任何其他类型的文件,从服务器的角度来看,基本上没有什么区别。所有服务器需要做的就是在响应头文件中发送类型并将文件的字节写入客户端。客户端如何处理文件取决于浏览器。在绝大多数情况下,浏览器将知道该怎么做(显示图像,通过插件显示PDF,保存.doc等)。

相关问题