asp.net实现文件上传,FileUpdate.aspx.cs和FileHandler.ashx代码的注释。

asp.net实现文件上传,FileUpdate.aspx.cs和FileHandler.ashx代码的注释。,第1张

void btnAdd_Click(Object s, EventArgs e){

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()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6930717.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存