程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# WinForm 上傳圖片,文件到服務器的方法Uploader.ashx,

C# WinForm 上傳圖片,文件到服務器的方法Uploader.ashx,

編輯:C#入門知識

C# WinForm 上傳圖片,文件到服務器的方法Uploader.ashx,


網上有很多方案,起初用時,因為對asp.net不太了解,覺得FTP實現不錯,可是後來發現,如果機器在域控下,就會有問題。

一年過去了,asp.net也熟悉了,知道ajax沒事應該用ashx,驗證碼也用ashx,當然這裡要說的WinForm上傳也應該是ashx了吧,哈哈,先提供簡單思路:

接收文件的asp.net是:Uploader.ashx,相關代碼:

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

 發送圖片或文件的WinForm.cs 相關代碼:  

view plaincopy to clipboardprint?
  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,相關代碼:

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

 發送圖片或文件的WinForm.cs 相關代碼:  

view plaincopy to clipboardprint?
  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. }  

c語言rand()函數

rand和srand的用法
首先我們要對rand&srand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

rand(產生隨機數)
表頭文件: #include<stdlib.h>

定義函數 :int rand(void)

函數說明 :
因為rand的內部實現是用線性同余法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍裡可看成是隨機的,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。rand ()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()。

返回值:
返回0至RAND_MAX之間的隨機整數值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(16位數)。若用unsigned int 雙字節是65535,四字節是4294967295的整數范圍。
0~RAND_MAX每個數字被選中的機率是相同的。

范例:
/* 產生介於1 到10 間的隨機數值,此范例未設隨機數種子,完整的隨機數產生請參考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
執行:

9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6 //再次執行仍然產生相同的隨機數

srand(設置隨機數種子)
表頭文件:#include<stdlib.h>

定義函數:void srand (unsigned int seed);

函數說明:
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

范例
/* 產生介於1 到10 間的隨機數值,此范例與執行結果可與rand()參照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
執行:與rand范例比較
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7
又或:
用"int x = rand() % 100;"來生成 0 到 100 之間的隨機數這種方法是不或取的,比較好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))產生一個0到n之間的隨機數
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten r......余下全文>>
 

c語言rand()函數

rand和srand的用法
首先我們要對rand&srand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

rand(產生隨機數)
表頭文件: #include<stdlib.h>

定義函數 :int rand(void)

函數說明 :
因為rand的內部實現是用線性同余法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍裡可看成是隨機的,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。rand ()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()。

返回值:
返回0至RAND_MAX之間的隨機整數值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(16位數)。若用unsigned int 雙字節是65535,四字節是4294967295的整數范圍。
0~RAND_MAX每個數字被選中的機率是相同的。

范例:
/* 產生介於1 到10 間的隨機數值,此范例未設隨機數種子,完整的隨機數產生請參考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
執行:

9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6 //再次執行仍然產生相同的隨機數

srand(設置隨機數種子)
表頭文件:#include<stdlib.h>

定義函數:void srand (unsigned int seed);

函數說明:
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

范例
/* 產生介於1 到10 間的隨機數值,此范例與執行結果可與rand()參照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
執行:與rand范例比較
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7
又或:
用"int x = rand() % 100;"來生成 0 到 100 之間的隨機數這種方法是不或取的,比較好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))產生一個0到n之間的隨機數
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten r......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved