UploadFile.cs
上传用户:whjkdz
上传日期:2013-05-19
资源大小:79k
文件大小:5k
源码类别:

.net编程

开发平台:

C#

  1. #region License
  2. /*
  3. * SunriseUpload - Asp.net Upload Component
  4. *
  5. * Copyright (C) 2004 mic <mic4free@hotmail.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20. *
  21. * In case your copy of SunriseUpload does not include a copy of the license, you may find it online at 
  22. * http://www.gnu.org/copyleft/gpl.html
  23. *
  24. * You can find new release of this component at http://athena.9966.org/SunriseUpload .
  25. */
  26. #endregion
  27. using System;
  28. using System.IO;
  29. namespace Sunrise.Web.Upload
  30. {
  31. /// <summary>
  32. /// 
  33. /// </summary>
  34. public class UploadFile
  35. {
  36. #region Properties
  37. /// <summary>
  38. /// Gets the length (in bytes) of the uploaded file.
  39. /// </summary>
  40. public long ContentLength
  41. {
  42. get { return this.filelength; }
  43. }
  44. /// <summary>
  45. /// Gets the MIME content type of the uploaded file.
  46. /// </summary>
  47. public string ContentType
  48. {
  49. get { return this.contenttype; }
  50. }
  51. /// <summary>
  52. /// Gets the file name(including path) of the uploaded file as it was on the client machine.
  53. /// </summary>
  54. public string FileName
  55. {
  56. get { return this.filename; }
  57. }
  58. /// <summary>
  59. /// Gets the path of where the uploaded file was located on the server machine.
  60. /// </summary>
  61. public string FilePath
  62. {
  63. get { return this.filepath; }
  64. }
  65. #endregion
  66. #region Fields
  67. private string contenttype;
  68. private long filelength;
  69. private string filename;
  70. private string filepath;
  71. #endregion
  72. /// <summary>
  73. /// 
  74. /// </summary>
  75. /// <param name="name"></param>
  76. public UploadFile(string name)
  77. {
  78. if ((name == null) || (name == string.Empty))
  79. {
  80. throw new ArgumentNullException("Name", "Name can not be null!");
  81. }
  82. string content = String.Empty;
  83. this.filename = string.Empty;
  84. this.filepath = string.Empty;
  85. this.contenttype = string.Empty;
  86. this.filelength = 0;
  87. if (IsContentHeader(name))
  88. {
  89. content = name;
  90. }
  91. else if (IsContentHeader(Utils.GetContext().Request[name]))
  92. {
  93. content = Utils.GetContext().Request[name];
  94. }
  95. if ((content == null) || (content == string.Empty))
  96. {
  97. return;
  98. }
  99. //Get file info from content.
  100. string[] contentArray = content.Split(';');
  101. this.contenttype = contentArray[0];
  102. this.contenttype = this.contenttype.Substring(14, (this.contenttype.Length - 14));
  103. this.filename = contentArray[1];
  104. this.filename = this.filename.Substring(10, (this.filename.Length - 11));
  105. this.filepath = contentArray[2];
  106. this.filepath = this.filepath.Substring(10, (this.filepath.Length - 11));
  107. string uploadFolder = Utils.GetUploadFolder();
  108. this.filepath = Path.Combine(uploadFolder, this.filepath);
  109. try
  110. {
  111. this.filelength = new FileInfo(this.filepath).Length;
  112. }
  113. catch (Exception exception)
  114. {
  115. string uploadGuid = Utils.GetContext().Request["Sunrise_Web_Upload_UploadGUID"];
  116. if (uploadGuid != null)
  117. {
  118. Utils.GetContext().Application.Remove(("_UploadGUID_" + uploadGuid));
  119. }
  120. throw exception;
  121. }
  122. }
  123. private bool IsContentHeader(string line)
  124. {
  125. if((line == null)
  126. ||(line == String.Empty))
  127. {
  128. return false;
  129. }
  130. string[] contentArray = line.Split(';');
  131. if (((contentArray.Length == 3)
  132. && contentArray[0].StartsWith("Content-Type:"))
  133. && (contentArray[1].StartsWith("filename="")
  134. && contentArray[2].StartsWith("filepath="")))
  135. {
  136. return true;
  137. }
  138. return false;
  139. }
  140. /// <summary>
  141. /// Save file to disk.
  142. /// </summary>
  143. /// <param name="filename"></param>
  144. public void SaveAs(string filename)
  145. {
  146. string uploadGuid = Utils.GetContext().Request["Sunrise_Web_Upload_UploadGUID"];
  147. try
  148. {
  149. UploadStatus uploadStatus;
  150. FileInfo fileInfo = new FileInfo(this.filepath);
  151. if (uploadGuid != null)
  152. {
  153. uploadStatus = new UploadStatus(uploadGuid);
  154. uploadStatus.State = UploadState.Moving;
  155. Utils.GetContext().Application[("_UploadGUID_" + uploadGuid)] = uploadStatus;
  156. }
  157. string directoryName = Path.GetDirectoryName(filename);
  158. if (!Directory.Exists(directoryName))
  159. {
  160. Directory.CreateDirectory(directoryName);
  161. }
  162. else if (File.Exists(filename))
  163. {
  164. File.Delete(filename);
  165. }
  166. //Move temporary file to file that client uploaded. Simply change it's name.
  167. fileInfo.MoveTo(filename);
  168. if (uploadGuid == null)
  169. {
  170. return;
  171. }
  172. uploadStatus = new UploadStatus(uploadGuid);
  173. uploadStatus.State = UploadState.Completed;
  174. Utils.GetContext().Application[("_UploadGUID_" + uploadGuid)] = uploadStatus;
  175. }
  176. catch (Exception exception)
  177. {
  178. if (uploadGuid != null)
  179. {
  180. Utils.GetContext().Application.Remove(("_UploadGUID_" + uploadGuid));
  181. }
  182. throw exception;
  183. }
  184. }
  185. }
  186. }