在C#中使用POST / httpwebrequest上传zip文件

时间:2013-08-02 19:57:17

标签: c# httpwebrequest zip

我正在尝试http://www.paraesthesia.com/archive/2009/12/16/posting-multipartform-data-using-.net-webrequest.aspx的代码通过httpwebrequest进行POST。

如果我用文本文件尝试相同的代码,那很好。但是,如果我使用zip文件,那么当重新下载该文件时,它说它不是有效的zip。我假设zip部分很可能以文本而不是二进制形式上传。但是,该页面确实说“在这里包含二进制内容是可以的。不要对它进行base-64编码或其他任何操作,只需将其流入。”但这似乎不适用于给定的代码。我假设我必须将读取文件的部分更改为流:

  using (FileStream fileStream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
  {
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
    {
      stream.Write(buffer, 0, bytesRead);
    }
    fileStream.Close();
  }

也许使用BinaryReader?我对如何在这种情况下使用它感到困惑,或者甚至是我需要做的事情。向正确的方向轻推会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

BinaryReader确实可以工作:

FileInfo fInfo = new FileInfo(file.FullName);
// 
long numBytes = fInfo.Length;

FileStream fStream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fStream);

byte[] bdata = br.ReadBytes((int)numBytes);

br.Close();

fStream.Close();

// Write bdata to the HttpStream
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("url-here");
// Additional webRequest parameters settings.
HttpStream stream = (Stream)webRequest.GetRequestStream();
stream .Write(bdata, 0, bdata.Length);
stream.Close();

HttpWebResponse response = (HttpWebRewponse)webRequest.GetResponse();