前两天看过bestcomy 的关于大文件上传的系列文章真是受益匪浅,对ASP.NET中上传文件的方法又有全新的认识,这比原来简单的运用SaveAs()的方法不知要高明多少。认识提高了,新的想法就来了。不知道AspnetUpload组建能不能支持断点续传。不过将服务器上的文件上传到数据库的过程我想是可以实现断点续传的。将大文件上传到数据库的基本思路是:分次读取文件到缓冲区,利用使用 SQL Server 的 UPDATETEXT 函数将文件以指定大小的块区写入。关于实现断点续传,我的想法是在数据库中增加一个字段,用于表示已经上传的字节数。如果再次上传时可以将上次上传的结尾为起头继续上传文件。
再次上次时的处理过程:
1、读取image 列的文本指针值,SELECT @Pointer=TEXTPTR(Picture) FROM Categories WHERE CategoryID=@idx
2、分次写入的函数,UPDATETEXT Categories.Picture @Pointer @Offset @Delete WITH LOG @Bytes
@Pointer 步骤1中取得的值
@Offset 偏移量,分块的大小
@Delete 为 0 表示不删除数据
@Bytes 本次插入的数据
3、在读取文件数据时,与原来代码有所不同。想要知道上次已经上传的字节数(增一个字段保存)。先用br.ReadBytes(已经上传的字节数)使流的当前位置提升到本次要上传文件的起点。在用br.ReadBytes(BUFFER_LENGTH);分块读取要插入的数据。
由于不知道AspnetUpload组件中的代码,不清楚bestcomy是如何实现客户端上载大文件到服务器上的方法,是不是还是分块上传的方法。如果是用分块上传的方法那么是否可以通过依次次追加的方式实现断点续传。
相关文档:
bestcomyBlog中的文章
(https://files.cnblogs.com/bestcomy/FileToMSSQL.rar中有将文件上传到数据库的代码)
《将 BLOB 值写入 SQL Server 时保留资源》讲述了在.net下如何将大数据写入SQL Server的方法。
|
请发表评论