Ahoj, prosim o radu, jedna se o upload na server post metodou, kod mi funguje, ale nejde mi vytahnout pocet odeslanych dat behem uploadu, stacilo by procentualni vyjadreni backgroundworkeru ale to se da pocitat asi taky jen prave treba poctem prenesenych dat, existuje nejaka metoda pro webresponse(doufam ze prave to odesila data na server) progresschange(teda v msdn knihovne sem ji nenasel)?nebo vite o nejaky lepsi metode jak na http upload post metodou? diky Honza :
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Collections.Specialized;
using System.Threading;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace upload_WithDetails
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private delegate void UpdateProgessCallback(Int64 BytesRead, Int64 TotalBytes);
public void UploadFilesToRemoteUrl(string url, string file, string logpath, NameValueCollection nvc)
{
FileInfo f = new FileInfo("FilePath");
Int64 fileSize = f.Length;
long length = 0;
string boundary = "----------------------------" +
DateTime.Now.Ticks.ToString("x");
HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest2.ContentType = "multipart/form-data; boundary=" +
boundary;
httpWebRequest2.Method = "POST";
httpWebRequest2.KeepAlive = true;
httpWebRequest2.Credentials =
System.Net.CredentialCache.DefaultCredentials;
Stream memStream = new System.IO.MemoryStream();
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
boundary + "\r\n");
string formdataTemplate = "\r\n--" +/* boundary +*/ "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
memStream.Write(formitembytes, 0, formitembytes.Length);
}
memStream.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
string header = string.Format(headerTemplate,
"form_upload", file);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(file, FileMode.Open,
FileAccess.Read);
byte[] buffer = new byte[2048];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0,
buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
memStream.Write(boundarybytes, 0, boundarybytes.Length);
fileStream.Close();
httpWebRequest2.ContentLength = memStream.Length;
Stream requestStream = httpWebRequest2.GetRequestStream();
memStream.Position = 0;
byte[] tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0,
tempBuffer.Length);
requestStream.Close();
WebResponse webResponse2 = httpWebRequest2.GetResponse();
Stream stream2 = webResponse2.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
webResponse2.Close();
httpWebRequest2 = null;
webResponse2 = null;
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
NameValueCollection myCol = new NameValueCollection();
string file;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
myCol.Add("FileName", "1");
file = "FilePath";
UploadFilesToRemoteUrl("http://up.uloz.to/ul/upload.cgi?tmp_sid=55fb51479a2ab312909cb47756ed3795&user_id=277895&host=uloz.to",
file, "FolderPath", myCol);
}
private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
}
}
}