网上有很多方案,起初用时,因为对asp.net不太了解,觉得FTP实现不错,可是后来发现,如果机器在域控下,就会有问题。

一年过去了,asp.net也熟悉了,知道ajax没事应该用ashx,验证码也用ashx,当然这里要说的WinForm上传也应该是ashx了吧,哈哈,先提供简单思路:

接收文件的asp.net是:Uploader.ashx,相关代码:

  1. <%@ WebHandler Language="C#" Class="Uploader" %>
  2. using System;
  3. using System.IO;
  4. using System.Web;
  5. public class Uploader : IHttpHandler
  6. {
  7. public void ProcessRequest(HttpContext hc)
  8. {
  9. foreach (string fileKey in hc.Request.Files)
  10. {
  11. HttpPostedFile file = hc.Request.Files[fileKey];
  12. file.SaveAs(Path.Combine(hc.Server.MapPath("."), file.FileName));
  13. }
  14. }
  15. public bool IsReusable
  16. {
  17. get { return true; }
  18. }
  19. }

发送图片或文件的WinForm.cs 相关代码:

  1. System.Net.WebClient myWebClient = new System.Net.WebClient();
  2. myWebClient.UploadFile("http://www.yongfa365.com/Uploader.ashx", "POST", "C:\\WINDOWS\\system32\\cmd.exe");

OK,完了,这样操作后,再也不用管是不是在域控内了,只要能上网,就能上传。够方便吧。


如果你要批量上传,还有上传后保存在哪个目录等操作可以参考柳永法(yongfa365)'Blog写的:

接收文件的asp.net是:Uploader.ashx,相关代码:

  1. <%@ WebHandler Language="C#" Class="Uploader" %>
  2. using System;
  3. using System.IO;
  4. using System.Web;
  5. public class Uploader : IHttpHandler
  6. {
  7. public void ProcessRequest(HttpContext hc)
  8. {
  9. string NowPath = Path.Combine(hc.Server.MapPath("."), hc.Request["path"]);
  10. if (!Directory.Exists(NowPath))
  11. {
  12. Directory.CreateDirectory(NowPath);
  13. }
  14. foreach (string fileKey in hc.Request.Files)
  15. {
  16. HttpPostedFile file = hc.Request.Files[fileKey];
  17. string FilePath = Path.Combine(NowPath, file.FileName);
  18. if (File.Exists(FilePath))
  19. {
  20. if (Convert.ToBoolean(hc.Request["overwrite"]))
  21. {
  22. File.Delete(FilePath);
  23. }
  24. else
  25. {
  26. continue;
  27. }
  28. }
  29. file.SaveAs(FilePath);
  30. }
  31. }
  32. public bool IsReusable
  33. {
  34. get { return true; }
  35. }
  36. }

发送图片或文件的WinForm.cs 相关代码:

  1. string url = @"http://www.yongfa365.com/Uploader.ashx?Overwrite=true&PATH=Logs\" + DateTime.Now.ToString("yyyy-MM-dd");
  2. foreach (string file in Directory.GetFiles(item))
  3. {
  4. System.Net.WebClient myWebClient = new System.Net.WebClient();
  5. myWebClient.UploadFile(url, "POST", file);
  6. }
05-11 11:37