[英]Open Word file stored in SQL Server
我们已使用某些Web窗体在Word Server(varbinary列)中成功添加了word文档,然后,我们希望一些工作人员能够下载它们。
我们有一些代码可以显示它,但是有时它会显示(在我的本地环境中),有时它却没有显示,但是,当它正式投入生产时。 因此,我们只想下载它,无论它是否打开都没有关系(如果您没有安装Word),我们只想下载它,例如“另存为”。 。”功能。 因为在我的本地环境中它运行良好,但是当它在IIS服务器上运行时,我们无法检索该文件(我猜是因为它会自动打开WORD)。
这是检索它的代码。
public string showDoc(int id, int numRef)
{
string fileName = Path.GetTempFileName() + ".docx";
Db.Open();
string cuerito = "select doc from tbl_references where [userId]=@id and [refNum]=@numRef";
SqlCommand command = new SqlCommand(cuerito, base.Db);
command.Parameters.AddWithValue("@id", id);
command.Parameters.AddWithValue("@numRef", numRef);
using (SqlDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
int size = 1024 * 1024;
byte[] buffer = new byte[size];
int readBytes = 0;
int index = 0;
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
while ((readBytes = (int)dr.GetBytes(0, index, buffer, 0, size)) > 0)
{
fs.Write(buffer, 0, readBytes);
index += readBytes;
}
}
}
}
Db.Close();
return fileName;
}
C#中是否有一种方法可以做到这一点? 不显示而是仅从SQL Server下载?
EB。
上面所有代码所做的就是从二进制字段中读取一些数据并将其写入流,然后将其写入服务器上的磁盘。 提供文件供下载之前,无需将文件保存到磁盘,您只需将数据直接流式传输到客户端-如果您使用Google进行搜索,则有大量示例和先前的问题包含此过程的工作示例。 它们将与任何文件一起使用,这些都不是特定于Word文件的。 而且它们都不以任何方式与互操作有关。
顺便说一句,文件是直接下载到用户磁盘还是被打开(保存在用户计算机上的临时文件夹中)很大程度上取决于用户计算机的配置,用户使用的浏览器,是否在该浏览器中安装了Word插件,其常规下载设置。 您可以设置HTTP头(再次在Google上),以提示浏览器仅保存文件而不是尝试打开文件,但最终它由浏览器而不是服务器控制。
这是一个从数据库表发送二进制数据作为文件下载的相当简单的示例: https : //ygtechme.wordpress.com/2012/08/27/downloading-file-from-database-using-c-asp-net/ 。 还有更多类似的主题,在线提供的主题略有不同。 但这是总的想法。
您发布的代码已经可以满足您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.