
if (UpFile.HasFile){//判断是否存在文件
if (CheckFileType(UpFile.FileName)){//判断文件类型
AddFile(UpFile.FileName, UpFile.FileContent)//调用AddFile方法
rptFiles.DataBind()}//数据绑定
}
}
///方法AddFile
///输入参数:文件名fileName,文件流upload
///输出参数:无
private void AddFile(string fileName, System.IO.Stream upload)
{
SqlConnection con = new SqlConnection(...)//新建数据库连接
SqlCommand cmd = new SqlCommand("INSERT File (FileName) Values (@FileName"+"SELECT @Identity=SCOPE_IDENTITY()", con)//
cmd.Parameters.AddWithValue("@FileName",fileName)//参数赋值
SqlParameter idParm = cmd.Parameters.Add("Identity",SqlDbType.Int)
idParm.Direction = ParameterDirection.Output
using (con){//使用using进行垃圾回收
con.Open()//打开数据库连接
cmd.ExecuteNonQuery()//执行插入语句
int newFileId = (int)idParm.Value//将idParm的值转换成整形并赋值给newFileID
StoreFile(newFileId,upload, con)//调用保存文件方法
}
}
///保存文件方法StoreFile
///输入参数:文件编号fileID,文件流upload,连接命令connection
/// 输入参数:无
private void StoreFile(int fileId, Stream upload, SqlCommand connection) {
int bufferLen = 8040//声明变量bufferLen并赋值8040
BinaryReader br = new BinaryReader(upload)//实例化二进制读取器,读取upload流
byte[] chunk = br.ReadBytes(bufferLen)//从流中读入bufferLen个字节数组,并使当前位置提升bufferLen,存入chunk数组中
SqlCommand cmd = new SqlCommand("UPDATE File SET FileBytes=@Buffer WHERE FileId=@FileId", connection)
cmd.Parameters.AddWithValue(@FileId, fileId)//参数赋值
cmd.Parameters.Add("@Buffer", SqlDbType.VarBinary, bufferLen).Value = chunk//参数赋值
cmd.ExecuteNonQuery()//执行更新语句
SqlCommand cmdAppend = new SqlCommand("UPDATE File SET FileBytes .WRITE(Buffer,Null,0) WHERE FileId=@FileId", connection)
cmdAppend.Parameters.AddWithValue("@FileID", fileId)
cmdAppend.Parameters.Add("Buffer", SqlDbType.VarBinary, bufferLen)
chunk = br.ReadBytes(bufferLen)
while (chunk.Length >0){//循环读取数据流
cmdAppend.Parameters["@Buffer"].Value = chunk
cmdAppend.ExecuteNonQuery()
chunk = br.ReadBytes(bufferLen)
}
br.Close()//关闭BinaryReader
}
请看一看是否ashx被缓存了。
在代码中添加如下语句使ashx不被缓存:
context.Response.Cache.SetNoStore()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)