【发布时间】:2014-12-27 19:51:08
【问题描述】:
当文件大小为1.66 MB或更大时,出现“文件大小超过长度”的错误。如何使系统尽可能地接受大文件大小。该文件保存在数据库中,列类型为 varbinary(max)。不知道是什么原因导致这个错误!
代码是:
if (FileUpload1.HasFile)
{
if (ext.Equals(".pdf"))
{
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
string classNmae = ddClass.Text.Split('~')[0] + ddClass.Text.Split('1');
com.Parameters.Clear();
com.CommandText = "UPDATE [Marking] SET [fileName]=@fileName, [fileType]=@fileType, [type]=@typ,[submissionDate]=@sd, [filePath]=@fp where [class_id]=@cid AND [module_id]=@mid AND [student_id]= '" + Session["id"].ToString() + "'";
com.Parameters.Add("@cid", SqlDbType.VarChar).Value = ddClass.Text.Split('~')[0];
com.Parameters.Add("@mid", SqlDbType.VarChar).Value = ddClass.Text.Split('~')[1];
com.Parameters.Add("@fileName", SqlDbType.VarChar).Value = filename;
com.Parameters.Add("@fileType", SqlDbType.VarChar).Value = "application/pdf";
com.Parameters.Add("@typ", SqlDbType.VarChar).Value = txtType.Text;
com.Parameters.Add("@sd", SqlDbType.VarChar).Value = DateTime.Now;
com.Parameters.Add("@fp", SqlDbType.Binary).Value = bytes;
com.ExecuteNonQuery();
【问题讨论】:
-
为什么不使用参数化 SQL 作为学生 ID? 一切都使用参数。 (这与问题无关,但无论如何你都应该这样做。)
-
检查与最大请求大小相关的 IIS 站点的配置 - ajaxuploader.com/large-file-upload-iis-asp-net.htm,还有 Jon Skeet 所说的!
-
还要记住数据库不是文件服务器
-
@WouterHuysentruit 虽然与 OP 发布的代码没有真正的关系,但可以提出一些论点,认为这是一条很好的路线 - technet.microsoft.com/en-us/library/…
-
参数化学生 ID 是什么?它会导致当前代码出现任何问题吗?