客户端:
private void button1_Click(object sender, EventArgs e)
{
string[] files = new string[3];
files[0] = @"C:\temp\001.jpg";
files[1] = @"C:\temp\002.jpg";
files[2] = @"C:\temp\test.jpg";
tState.Text = "上传开始...";
string result =UpLoadFile("100", files, "image/jpeg");
tState.Text = result;
}
public static string UpLoadFile(string ApplyId, string[] files, string contentType)
{
string result = string.Empty;
if (files.Length <= 0) return result;
NameValueCollection nvc = new NameValueCollection();
nvc.Add("applyid", ApplyId);
string url = "http://(serverip)/test/test.aspx";
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream rs = wr.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
for (int k = 0, k2 = files.Length; k < k2; k++)
{
string fname = "uploadfile" + k.ToString();
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, fname, files[k], contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(files[k], FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
if (k < k2 - 1) rs.Write(boundarybytes, 0, boundarybytes.Length);
}
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try
{
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
result = reader2.ReadToEnd();
}
catch (Exception ex)
{
if (wresp != null)
{
wresp.Close();
wresp = null;
}
result = ex.Message;
}
finally
{
wr = null;
}
return result;
}
服务端:
protected void Page_Load(object sender, EventArgs e)
{
string fpath = getApplyidPath(applyid);
int n = Request.Files.AllKeys.Length;
int flag = 0, count = 0;
int k=0;
byte[] bts;
for (int i = 0; i < n; i++)
{
System.Web.HttpPostedFile file = Request.Files[i];
filename = file.FileName;
if (filename.Length > 0)
{
extname = filename.Substring(filename.LastIndexOf("."));
fname = fpath + (i + 1).ToString() + extname;
k =(int)file.InputStream.Length;
bts = new byte[k];
file.InputStream.Read(bts, 0, k);
file.SaveAs(fname);
flag = (flag | (int)Math.Pow(2 , i));
count++;
}
}
Response.Write("保存“+ count.ToString()+“个文件。”);
}
private string getApplyidPath(int applyid)
{
//get and set path
string phpath = Server.MapPath("/upload/") + applyid.ToString()+"\\";
if (!Directory.Exists(phpath)) Directory.CreateDirectory(phpath);
return phpath;
}