一个网站中需要上传一个文件到另一个网站,可以使用HttpWebRequest或者WebClient。
但是WebClient需要首先上传文件到服务器,才能执行发送,不太符合我的需求,这里不再介绍。
通过HttpWebRequest发送的原理:
构建一个HttpWebRequest,通过FileUpload获取要上传的文件,通过字节流发送这个文件,另一个网站接收字节流,保存到服务器。
发送程序:
0
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
|
//获取要上传的文件信息
byte[]data=fileupload1.FileBytes;
stringfileName=fileupload1.FileName;
stringfileType=fileupload1.PostedFile.ContentType;
stringfileSize=data.Length.ToString();
HttpWebRequest myRequest=(HttpWebRequest)WebRequest.Create("http://localhost:8102/Default.aspx");
myRequest.Method="POST";
myRequest.ContentType=fileType;
myRequest.ContentLength=data.Length;
myRequest.Headers.Add("FileType",Server.UrlEncode(fileType));
myRequest.Headers.Add("FileSize",fileSize);
myRequest.Headers.Add("FileName",Server.UrlEncode(fileName));
using(Stream newStream=myRequest.GetRequestStream())
{
// Send the data.
newStream.Write(data,0,data.Length);
newStream.Close();
}
// Get response
HttpWebResponse myResponse=(HttpWebResponse)myRequest.GetResponse();
StreamReader reader=newStreamReader(myResponse.GetResponseStream(),Encoding.UTF8);
stringcontent=reader.ReadToEnd();
|
接收程序:
0
1
2
3
4
5
6
7
8
9
10
|
stringfileName=Server.UrlDecode(Request.Headers["FileName"].ToString());
stringfileType=Server.UrlDecode(Request.Headers["FileType"].ToString());
intfileSize=int.Parse(Request.Headers["FileSize"].ToString());
byte[]bytes=Request.BinaryRead(fileSize);
File.WriteAllBytes(Server.MapPath("~/uploadfiles/"+fileName),bytes);
Response.HeaderEncoding=System.Text.Encoding.UTF8;
Response.Charset="utf-8";
Response.Write("FileType:"+fileType+";FileName:"+fileName+";FileSize:"+fileSize);
|
FROM:http://blog.bossma.cn/dotnet/asp-net-httpwebrequest-upload-send-file/