
客户端有个文件存放用户数据,想将它压缩后发送到服务端保存,然后其他客户端通过向服务端请求获取文件数据替换本地文件。实现用户数据同步。
using (WebClient wc = new WebClient()){
wc.UploadFile(上传文件的url, 本地文件的名称)
}
C#中post用法如下:
首先,POST请求会把请求的数据放置在HTTP请求包的包体中。
其次,POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
最后,POST的安全性较高。
通过C#post文件流的如下代码为:
using System
using System.Collections.Generic
using System.Collections.Specialized
using System.IOusing System.Net
using System.Text
public class HttpPost{
/// <summary> ///
以Post 形式提交数据到 uri
/// </summary> ///
<param name="uri">
</param>
/// <param name="files">
</param>
/// <param name="values"></param>
/// <returns></returns>
public static byte[] Post(Uri uri, IEnumerable<UploadFile>files, NameValueCollection values) {
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x")
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri)
request.ContentType = "multipart/form-databoundary=" + boundary
request.Method = "POST"
request.KeepAlive = true
request.Credentials = CredentialCache.DefaultCredentials
MemoryStream stream = new MemoryStream()
byte[] line = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n")
//提交文本字段
if (values != null)
{
string format = "\r\n--" + boundary + "\r\nContent-Disposition: form-dataname=\"{0}\"\r\n\r\n{1}"
foreach (string key in values.Keys)
{
string s = string.Format(format, key, values[key])
byte[] data = Encoding.UTF8.GetBytes(s)
stream.Write(data, 0, data.Length)
}
stream.Write(line, 0, line.Length) }
//提交文件
if (files != null)
{
string fformat = "Content-Disposition: form-dataname=\"{0}\"filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n"
foreach (UploadFile file in files)
{ string s = string.Format(fformat, file.Name, file.Filename)
byte[] data = Encoding.UTF8.GetBytes(s)
stream.Write(data, 0, data.Length)
stream.Write(file.Data, 0, file.Data.Length)
stream.Write(line, 0, line.Length)
} }
request.ContentLength = stream.Length
Stream requestStream = request.GetRequestStream()
stream.Position = 0L
stream.CopyTo(requestStream)
stream.Close()
requestStream.Close()
using (var response = request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var mstream = new MemoryStream())
{ responseStream.CopyTo(mstream)
return mstream.ToArray() } }
/// <summary> /// 上传文件
/// </summary>
public class UploadFile
{
public UploadFile()
{
ContentType = "application/octet-stream" }
public string Name { getset}
public string Filename { getset}
public string ContentType { getset}
public byte[] Data { getset} }}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)