不知地震什么时候结束,为了给老婆小孩守夜,看来还不能睡,那就把第二篇也写了吧,只是不知对大家有没有用哟。
为了提供文件内容,我们需要首先需确定客户请求中发送的有文件内容,然后确定文件内容的位置。这部分对应的代码如下:
HttpApplication app = sender as HttpApplication;
HttpWorkerRequest request = GetWorkerRequest(app.Context);
if (!IsUploadRequest(app.Request)) return; //不是文件上传,则退出
string sContentType = app.Request.ContentType.ToLower();
byte[] arrBoundary = GetMultipartBoundary(sContentType);
int ContentLength = app.Request.ContentLength; //信息体的总长度
DataReader dataReader = new DataReader(app.Context.Request.ContentEncoding, arrBoundary);
DateTime startDate = DateTime.Now;
byte[] arrBuffer = request.GetPreloadedEntityBody();
if (arrBuffer == null)
{
arrBuffer = new Byte[0];
tempFile.Close();
return; //没有读取到信息体
}
else
{
这里是对文件内容的处理
}
private byte[] GetMultipartBoundary()

{
string attributeFromHeader = GetAttributeFromHeader(this.ContentType, "boundary");
if (attributeFromHeader == null)
{
return null;
}
attributeFromHeader = "--" + attributeFromHeader;
return Encoding.ASCII.GetBytes(attributeFromHeader.ToCharArray());
}
然后我们采用这个方法,就可以从请求的内容中提取出类似“-----------------------------7d81e441d025c”这样的字符串。这样,我们就可以分隔页面内不同控件的内容了。
最后,我们分析文件上传控件的内容:
我们可以发现,文件上传控件有一个filename属性,然后,下一行指定文件的MIME类型,随后这个空白行,在空白行下面,直到下一处类似“-----------------------------7d81e441d025c”标志字符串间,就是客户端发送的文件内容。我们只需把这些内容写入到服务器文件中即可。
这里,文件内容的提取的问题就可以解决了。在提取文件内容时,对处理标志字符串时需要特别处理,防止标志字符分别读取到两个缓冲区中,所以这部分代码还是比较多的,具体请参看源代码中的DataReader类。
第二篇就写到这,实在是太困了,后面的等一下再写吧!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-281051/ ,如需转载,请注明出处,否则将追究法律责任。