long pos = 0;
for (long i = 0; i < formData.LongLength; i++)
{
if (formData[i] == (byte)'\r' && formData[i + 1] == (byte)'\n' && formData[i + 2] == (byte)'\r' && formData[i + 3] == (byte)'\n')
{
pos = i;
break;
}
}
if (pos == 0) { Response.End(); return; }
head = encoding.GetString(formData, 0, (int)pos);
fileData = new byte[formData.LongLength - pos - 3];
Array.Copy(formData, pos + 4, fileData, 0, formData.LongLength - pos - 4);
/************************************************************************************************
//传来的表单形式是:
//"-----------------------------7d5fa3820f84\r\nContent-Disposition: form-data; name=\"NewFile\"; filename=\"F:\\Documents\\4(10995).jpg\"\r\nContent-Type: image/pjpeg\r\n\r\n
//后面是文件数据
************************************************************************************************/
head = head.ToLower();
head = head.Remove(0, head.IndexOf("\r\n") + 2);
head = head.Replace("\"", "");
string postFileName = string.Empty;
string fileName;//no path
string fileType, fileExt;
postFileName = head.Substring(0, head.IndexOf("\r\n"));//Content-Disposition: form-data; name=\"NewFile\"; filename=\"F:\\Documents\\4(10995).jpg\"
fileType = head.Remove(0, postFileName.Length + 3);//returns:Content-Type: image/pjpeg
postFileName = postFileName.Substring(postFileName.IndexOf("filename=") + "filename=".Length);//C:\path\name
fileName = Path.GetFileName(postFileName);
fileExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
if (fileData.LongLength > maxSize) {
SendResults(2, ResolveUrl(savePath + fileName), fileName, "Too large");
return;
}
bool isallow=false;
foreach(string ext in denyedExt){
if (ext == fileExt) {
isallow = false;
SendResults(202, ResolveUrl(savePath + fileName), fileName, "forrbiden");
return;
}
}
foreach (string ext in allowedExt) {
if (ext == fileExt) { isallow = true; break; }
}
if ( isallow)
{
string tmpPath = Server.MapPath(savePath);
if (!Directory.Exists(tmpPath)) {
try
{
Directory.CreateDirectory(tmpPath);
}
catch { SendResults(200, ResolveUrl(savePath + fileName), fileName, "没有写入权限"); }
}
//Response.BinaryWrite(fileData);
FileStream savefileStream= new FileStream(tmpPath+fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
for (long i = 0; i < fileData.LongLength; i++)
{
savefileStream.WriteByte(fileData[i]);
}
savefileStream.Close();
SendResults(0, ResolveUrl(savePath + fileName), fileName, "No errors");
}
}
}