UserAvatarRepository.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. 
  2. using System;
  3. using System.Collections;
  4. using System.Web;
  5. using CommonTool;
  6. using YZXYH.Repository.Models;
  7. using Newtonsoft.Json;
  8. namespace YZXYH.Repository
  9. {
  10. public partial class UserAvatarRepository
  11. {
  12. public string UploadAvatar(string userNo,HttpRequestBase request, HttpServerUtilityBase server)
  13. {
  14. Result result = new Result
  15. {
  16. avatarUrls = new ArrayList(),
  17. success = false,
  18. msg = "Failure!"
  19. };
  20. //取服务器时间+8位随机码作为部分文件名,确保文件名无重复。
  21. string fileName = DateTime.Now.ToString("yyyyMMddhhmmssff") + UtilRandom.GetRandomCode(8);
  22. //定义一个变量用以储存当前头像的序号
  23. int avatarNumber = 1;
  24. //遍历所有文件域
  25. foreach (string fieldName in request.Files.AllKeys)
  26. {
  27. HttpPostedFileBase file = request.Files.Get(fieldName);
  28. if (!System.IO.Directory.Exists(server.MapPath("../Upload/Avatar")))
  29. System.IO.Directory.CreateDirectory(server.MapPath("../Upload/Avatar"));
  30. //处理原始图片(默认的 file 域的名称是__source,可在插件配置参数中自定义。参数名:src_field_name)
  31. //如果在插件中定义可以上传原始图片的话,可在此处理,否则可以忽略。
  32. if (fieldName == "__source")
  33. {
  34. //文件名,如果是本地或网络图片为原始文件名(不含扩展名)、如果是摄像头拍照则为 *FromWebcam
  35. //fileName = file.FileName;
  36. //当前头像基于原图的初始化参数(即只有上传原图时才会发送该数据),用于修改头像时保证界面的视图跟保存头像时一致,提升用户体验度。
  37. //修改头像时设置默认加载的原图url为当前原图url+该参数即可,可直接附加到原图url中储存,不影响图片呈现。
  38. string initParams = request.Form["__initParams"];
  39. result.sourceUrl = $"../Upload/Avatar/YZXYH_UserSource_{fileName}.jpg";
  40. file?.SaveAs(server.MapPath(result.sourceUrl));
  41. result.sourceUrl += initParams;
  42. /*
  43. 可在此将 result.sourceUrl 储存到数据库,如果有需要的话。
  44. */
  45. }
  46. //处理头像图片(默认的 file 域的名称:__avatar1,2,3...,可在插件配置参数中自定义,参数名:avatar_field_names)
  47. else if (fieldName.StartsWith("__avatar"))
  48. {
  49. string virtualPath = $"../Upload/Avatar/YZXYH_UserAvatar{avatarNumber}_{fileName}.jpg";
  50. result.avatarUrls.Add(virtualPath);
  51. /*
  52. 可在此将 virtualPath 储存到数据库,如果有需要的话。
  53. */
  54. UserAvatar userAvatar = UnitOfWork.UserAvatarRepository.GetSingle(a => a.UserNo == userNo);
  55. if (userAvatar == null)
  56. {
  57. UnitOfWork.UserAvatarRepository.InsertNoId(new UserAvatar()
  58. {
  59. UserNo = userNo,
  60. FileName = fileName,
  61. FilePath = virtualPath,
  62. IsLocked = "N"
  63. });
  64. }
  65. else
  66. {
  67. UnitOfWork.UserAvatarRepository.Update(a => a.Id == userAvatar.Id, a => new UserAvatar()
  68. {
  69. FileName = fileName,
  70. FilePath = virtualPath,
  71. });
  72. }
  73. if (UnitOfWork.Save())
  74. {
  75. file?.SaveAs(server.MapPath(virtualPath));
  76. if (userAvatar != null)
  77. {
  78. FileFuns.DeleteFile(server.MapPath(userAvatar.FilePath));
  79. }
  80. }
  81. avatarNumber++;
  82. }
  83. /*
  84. else
  85. {
  86. 如下代码在上传接口Upload.aspx中定义了一个user=xxx的参数:
  87. var swf = new fullAvatarEditor('swf', {
  88. id: 'swf',
  89. upload_url: 'Upload.aspx?user=xxx'
  90. });
  91. 在此即可用Request.Form["user"]获取xxx。
  92. }
  93. */
  94. }
  95. result.success = true;
  96. result.msg = "Success!";
  97. //返回图片的保存结果(返回内容为json字符串,可自行构造,该处使用Newtonsoft.Json构造)
  98. return JsonConvert.SerializeObject(result);
  99. }
  100. }
  101. struct Result
  102. {
  103. /// <summary>
  104. /// 表示图片是否已上传成功。
  105. /// </summary>
  106. // ReSharper disable once InconsistentNaming
  107. public bool success;
  108. /// <summary>
  109. /// 自定义的附加消息。
  110. /// </summary>
  111. // ReSharper disable once InconsistentNaming
  112. public string msg;
  113. /// <summary>
  114. /// 表示原始图片的保存地址。
  115. /// </summary>
  116. // ReSharper disable once InconsistentNaming
  117. public string sourceUrl;
  118. /// <summary>
  119. /// 表示所有头像图片的保存地址,该变量为一个数组。
  120. /// </summary>
  121. // ReSharper disable once InconsistentNaming
  122. public ArrayList avatarUrls;
  123. }
  124. }