我有一个网站,它允许文件上传高达 1gb,目前它将文件读入 Filestream,然后将其作为二进制内容写入 MSSQL 数据库。
我发现这越来越占用大量资源,所以我调查了“分块”文件,以便它进入 4mb 块。
我已经得到它,所以块进入数据库,但现在上传时间是从 FileUpload 控件到 FileStream 的两倍,一旦它开始将它以块的形式写入数据库。
理想情况下,我希望它直接从 FileUpload 分块,这样当 InputStream 中有 4mb 时,它开始写入数据库。这是我到目前为止测试过的内容:
Stream fs = FileUpload.PostedFile.InputStream;
int BUFFER_SIZE = 4000;
byte[] chunk = new byte[BUFFER_SIZE];
SqlConnection connection = new SqlConnection(ConfigurationSettings.AppSettings["SQLConnection"]);
connection.Open();
SqlCommand cmd = new SqlCommand("UPDATE TABLENAME SET Content.WRITE(@data, NULL, 0) WHERE ID ='" + DocID + "'", connection);
SqlParameter dataParam = cmd.Parameters.Add("@data", SqlDbType.VarBinary); // remaining as Update.WRITE
SqlParameter lengthParam = cmd.Parameters.Add("@length", SqlDbType.Int);
int cIndex = 0;
int readBytes = 0;
int fileSize = System.Convert.ToInt32(fs.Length);
while (cIndex < fileSize)
{
if (cIndex + BUFFER_SIZE > fileSize)
readBytes = fileSize - cIndex;
else
readBytes = BUFFER_SIZE;
fs.Read(chunk, 0, readBytes);
dataParam.Value = chunk;
dataParam.Size = readBytes;
lengthParam.Value = readBytes;
cmd.ExecuteNonQuery();
cIndex += BUFFER_SIZE;
}
所以澄清一下,我正在等待 PostedFile 完全上传文件,然后我才能开始将它发送到数据库。
FileUpload.PostedFile.InputStream;
谁能指出我正确的方向?
非常感谢。