好的,我设法将DOCX这个词上传到我的SQL Server数据库中varbinary (Max)
列。
我可以从数据库中检索DOCX并将其从varbinary转换回数组,然后将其作为下载提供:
Byte[] bytes = (Byte[])dt.Rows[0]["TD_DocFile"];
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = dt.Rows[0]["TD_DocContentType"].ToString();
Response.AddHeader("content-disposition", "attachment;filename="
+ dt.Rows[0]["TD_DocTitle"].ToString());
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
我宁愿在变量中使用它而不是下载文档,所以我在其中交换占位符。
我试图找到一种方法将其转换为字符串,或者我可以将它用于docx,例如。
DocX letter = this.document();
到目前为止,我看到的最佳选择是文件流版本
public static MemoryStream databaseFileRead(string varID) {
MemoryStream memoryStream = new MemoryStream();
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
using (var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) {
sqlQuery.Parameters.AddWithValue("@varID", varID);
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
sqlQueryResult.Read();
var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
//using (var fs = new MemoryStream(memoryStream, FileMode.Create, FileAccess.Write)) {
memoryStream.Write(blob, 0, blob.Length);
//}
}
}
return memoryStream;
}
但我无法将二进制数组字节和内存流转换为docx可以理解的变量。也许我只是在寻找错误的对话。有人可以给我一个提示吗?
该字段从数据库中调用TD_DocContentType
。我可以接受在这种情况下我对转换很弱。我看不出自己做错了什么。需要一个新的想法。
亲切的问候,
雷
答案 0 :(得分:0)
我找到了解决问题的方法。花了一段时间,还有很多研究要做。我试图从错误的角度解决问题。
此解决方案从数据库中读取二进制字段,并将其作为文件写入名为doctemp的内部Web文件夹。
private void download(DataTable dt)
{
var physicalPath = Server.MapPath("~\\doctemp\\{0}");
string outputFileName = string.Format(physicalPath, dt.Rows[0]["TD_DocTitle"]);
filename = outputFileName;
Byte[] bytes = (Byte[])dt.Rows[0]["TD_DocFile"];
File.WriteAllBytes(outputFileName, bytes);
}