【发布时间】:2015-01-08 10:42:59
【问题描述】:
如果txt文件上传成功。但是上传大的txt文件然后发生错误。 错误是“字符串或二进制数据被截断”
protected void Button1_Click(object sender, EventArgs e)
{
FileUpload1.SaveAs(Server.MapPath("~\\upload\\") + FileUpload1.FileName);
f = Path.GetFileNameWithoutExtension(FileUpload1.FileName);
st = Path.GetFileName(FileUpload1.FileName);
ml = Server.MapPath("~\\upload\\");
nww = FileUpload1.FileName;
ty = Path.GetExtension(FileUpload1.FileName);
kk = ml + f + ty;
FileInfo fz = new FileInfo(kk);
long s1 = fz.Length;
string fsize = s1.ToString();
string dat = DateTime.Now.ToString();
FileStream fs = new FileStream(kk, FileMode.Open, FileAccess.ReadWrite);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
fs.Close();
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into ofileup (Fid,filename,files,ftype,fsize,filepath,oname,status,date) values(@Fid,@filename,@files,@ftype,@fsize,@filepath,@oname,@status,@date)", con);
cmd1.Parameters.AddWithValue("@Fid", Label14.Text);
cmd1.Parameters.AddWithValue("@filename", st);
cmd1.Parameters.AddWithValue("@files", buffer);
cmd1.Parameters.AddWithValue("@ftype", ty);
cmd1.Parameters.AddWithValue("@fsize", fsize);
cmd1.Parameters.AddWithValue("@filepath", kk);
cmd1.Parameters.AddWithValue("@oname", Label16.Text);
cmd1.Parameters.AddWithValue("@status","waiting");
cmd1.Parameters.AddWithValue("@date", dat);
cmd1.ExecuteNonQuery();
con.Close();
Label17.Text = "File Uploaded Successfully...";
autoid();
}
在数据库中
- Fid int
- 文件名 varchar(250)
- 文件 varchar(150)
- ftype varchar(150)
- fsize bigint
- 文件路径 varchar(150)
- oname varchar(50)
- 状态 varchar(50)
- 日期 varchar(50)
【问题讨论】:
-
好吧,你的
files字段说它只能处理 150 个字符,但你用一个可能比这更大的文件的内容填充它。 (尽管该字段是文本字段,但您也没有非常清楚地阅读它,并且将其作为二进制数据读取,但这些是单独的问题。)当您的架构不允许时,您如何期望数据库处理大文件是吗? -
虽然这个问题与数据库有关。这里有一些支持您的 .net 应用程序以允许上传大文件的要点。
<httpRuntime maxRequestLength="2097152" executionTimeout="600" />只需在<system.web>部分下的 web.config 中设置。在示例中,我将最大长度设置为 2GB。请注意,maxRequestLength以 KB 为单位设置,并且可以设置为2GB(2079152 KB)。但默认文件大小限制为 (4MB)。
标签: c# sql-server