C# http 發送文件和接收文件的代碼。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

//客戶端發送文件<br data-filtered="filtered">static void Main(string[] args)

        {

            Upload_Request("http://192.168.0.4:8099/WebService/AndroidProcessRequest.aspx"@"E:\vid20140213160351.zip"@"E:\vid20140213160351.zip");

        }

        private static int Upload_Request(string address, string fileNamePath, string saveName)

        {

            int returnValue = 0;

 

            // 要上傳的文件  

            FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite);

            BinaryReader r = new BinaryReader(fs);

 

            //時間戳  

            string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");

            byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");

 

            //請求頭部信息  

            StringBuilder sb = new StringBuilder();

            sb.Append("--");

            sb.Append(strBoundary);

            sb.Append("\r\n");

            sb.Append("Content-Disposition: form-data; name=\"");

            sb.Append("file");

            sb.Append("\"; filename=\"");

            sb.Append(saveName);

            sb.Append("\"");

            sb.Append("\r\n");

            sb.Append("Content-Type: ");

            sb.Append("application/octet-stream");

            sb.Append("\r\n");

            sb.Append("\r\n");

            string strPostHeader = sb.ToString();

            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);

 

            // 根據uri創建HttpWebRequest對象  

            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address));

            httpReq.Method = "POST";

 

            //對發送的數據不使用緩存  

            httpReq.AllowWriteStreamBuffering = false;

 

            //設置獲得響應的超時時間(300秒)  

            httpReq.Timeout = 300000;

            httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;

            long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;

            long fileLength = fs.Length;

            httpReq.ContentLength = length;

            try

            {

 

                //每次上傳4k  

                int bufferLength = 4096;

                byte[] buffer = new byte[bufferLength];

 

                //已上傳的字節數  

                long offset = 0;

 

                //開始上傳時間  

                DateTime startTime = DateTime.Now;

                int size = r.Read(buffer, 0, bufferLength);

                Stream postStream = httpReq.GetRequestStream();

 

                //發送請求頭部消息  

                postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

                while (size > 0)

                {

                    postStream.Write(buffer, 0, size);

                    size = r.Read(buffer, 0, bufferLength);

                }

                //添加尾部的時間戳  

                postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

                postStream.Close();

 

                //獲取服務器端的響應  

                WebResponse webRespon = httpReq.GetResponse();

                Stream s = webRespon.GetResponseStream();

                StreamReader sr = new StreamReader(s);

 

                //讀取服務器端返回的消息  

                String sReturnString = sr.ReadLine();

                s.Close();

                sr.Close();

                if (sReturnString == "Success")

                {

                    returnValue = 1;

                }

                else if (sReturnString == "Error")

                {

                    returnValue = 0;

                }

 

            }

            catch (Exception ex)

            {

                returnValue = 0;

            }

            finally

            {

                fs.Close();

                r.Close();

            }

 

            return returnValue;

        }

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

//接收文件 aspx掛在iis上能自動調用該類

public void ProcessRequest(HttpContext context)

    {

        context.Response.ContentType = "text/plain";

 

        context.Response.Write("id = " + context.Request.Form["id"]

            ", name = " + context.Request.Form["name"]

            ", count = " + context.Request.Files.Count);

        long filelegth = long.Parse(context.Request.Form["id"]);

        //WritetoLog("1");

        for (int i = 0; i < context.Request.Files.Count; i++)

        {

            try

            {

                HttpPostedFile aFile = context.Request.Files[i];

                Stream mystream = aFile.InputStream;

                //FileStream fs = (FileStream)aFile.InputStream;

                //FileStream fs = new FileStream(aFile.FileName, FileMode.Open);

                FileStream fs;

                //FileStream fs = new FileStream(aFile.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                long lStartPos = 0;

 

 

                WritetoLog(aFile.FileName);

                if (aFile.ContentLength == 0 || String.IsNullOrEmpty(aFile.FileName))

                    continue;

 

                string displayFileName = Path.GetFileName(aFile.FileName);

                string realFileName = @"D:\" + displayFileName;     //真實路徑

               // WritetoLog(realFileName);

 

                if (System.IO.File.Exists(realFileName))

                {

                    WritetoLog("111111111111111");

                    fs = File.Open(realFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);

                    lStartPos = fs.Length;

                    fs.Seek(lStartPos, System.IO.SeekOrigin.Current); //移動文件流中的當前指針

                }

                else

                {

                    WritetoLog("22222222222222");

                    fs = new System.IO.FileStream(realFileName, System.IO.FileMode.Create);

                    lStartPos = 0;

                }

 

                    byte[] nbytes = new byte[512];

                    int nReadSize = 0;

                    nReadSize = mystream.Read(nbytes, 0, 512);

                    while (nReadSize > 0)

                    {

                        fs.Write(nbytes, 0, nReadSize);

                        nReadSize = mystream.Read(nbytes, 0, 512);

                    }

                    if (filelegth == fs.Length)

                    {

                         

                    }

                    fs.Close();

                    mystream.Close();

                    //Console.WriteLine("下載完成");

                 

                 

 

                //aFile.SaveAs(realFileName);

 

                //DownloadFile(context, realFileName, 10);

            }

            catch (Exception ex)

            {

                WritetoLog(ex.ToString());

            }

        }

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章