我在数据库中强制下载二进制文件(image / pdf)时遇到问题(我正在使用Syabase)。代码很好/工作,但如果我上传大文件(超过50 kb-它将返回32kb大小的文件,它返回损坏的文件。 如果我使用文件大小10-40 kb,格式为pdf或image,它可以正常工作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using Sybase.Data.AseClient;
using Sybase.Data;
using System.IO;
using System.Configuration;
-----------------
conn.Open();
string myquery = "SELECT * FROM pen WHERE p_id=@p_id ";
AseCommand cmd = new AseCommand(myquery, conn);
cmd.Parameters.Add("@pen_id", AseDbType.VarChar).Value = pen_id;
AseDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
Response.ClearContent();
Response.ContentType = "application/pdf"; //hardcore for pdf
Response.AddHeader("Content-Disposition", "attachment;filename="+dr["file_name"]+"");
Response.BinaryWrite((byte[])dr["the_file"]);
Response.Flush();
Response.End();
}
答案 0 :(得分:0)
只是猜测......你可能想把你的阅读结构改为一段时间(dr.Read())而不是if(dr.Read())。
按原样,您只会读到数据读取器的缓冲区大小的末尾,但是每次数据读取器通过其缓冲区时都要继续读取,直到到达文件末尾。有意义吗?
将所有响应清除,结束和标题设置拉出while循环之外。