博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# http 发送文件和接收文件的代码。
阅读量:4302 次
发布时间:2019-05-27

本文共 4785 字,大约阅读时间需要 15 分钟。

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());

            }

        }

    }

转载地址:http://rgows.baihongyu.com/

你可能感兴趣的文章
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>