服务契约:
[OperationContract]
[WebInvoke(
UriTemplate = "RegistMember/?MemberID={MemberID}",
//RequestFormat = WebMessageFormat.Json,
//ResponseFormat = WebMessageFormat.Json,
//BodyStyle = WebMessageBodyStyle.WrappedRequest
Method = "POST")]
bool RegistMember(System.IO.Stream stream, int MemberID);
服务内容:
public bool RegistMember(System.IO.Stream stream, int MemberID)
{
try
{
string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/RegistPhotos");
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);//没有文件夹 创建文件夹
}
string path = Path.Combine(folder, MemberID.ToString() + ".jpg");//文件夹路径
using (var ms = new MemoryStream())
{
stream.CopyTo(ms);
ms.Position = 0;
Encoding encoding = System.Text.Encoding.UTF8;
var reader = new StreamReader(ms, encoding);
var headerLength = 0;
//读第一行,一般表单头标志是带有“-----”字符的例如:
string firstLine = reader.ReadLine();
if (firstLine.Contains("--"))
{
headerLength += encoding.GetBytes(firstLine).Length + 2;
//读第二行,第二行还可以获得上传文件的名字
var secondLine = reader.ReadLine();
headerLength += encoding.GetBytes(secondLine).Length + 2;
//var fileName = new System.Text.RegularExpressions.Regex("filename=\"(?<fn>.*)\"").Match(secondLine).Groups["fn"].Value;
//可能还有辅助信息,把这些行都读完,一直到一行空 下面的是文件的内容
while (true)
{
var line = reader.ReadLine();
if (line == null)
break;
//加2是换行符
headerLength += encoding.GetBytes(line).Length + 2;
if (line == "")
break;
}
}
ms.Position = headerLength;//文件的开始位置
//在文件的最后也有表单的最后结尾和第一行相同,
////减去末尾的字符串:“\r\n--\r\n”
if (firstLine.Contains("--"))
ms.SetLength(ms.Length - encoding.GetBytes(firstLine).LongLength - 3 * 2);
else
ms.SetLength(ms.Length);
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
{
ms.CopyTo(fs);
fs.Close();
fs.Dispose();
}
}
string sql = "UPDATE Viw_Robot_Member_List SET IsRegister=2 WHERE MemberId=@MemberID";
SqlParameter[] params_sql = new SqlParameter[]{
SqlHelper.MakeInParam("@MemberID",MemberID)
};
db.robot.ExecuteNonQuery(sql, params_sql);
return true;
}
catch
{
return false;
}
}