Потоковый файл с клиента на веб-запрос
Я работаю над загрузкой файлов из веб-приложения aC#, переходя с клиентского компьютера на удаленный облачный хост. Пользователь вводит имя и местоположение файла и передает его на сервер. Я передаю содержимое файла в виде фрагментов к запросу. Тем не менее, файл недействителен, когда он попадает в пункт назначения. Я уверен, что это как-то связано с моими заголовками запросов и таким барахлом, так как я могу сделать это при загрузке с сервера в удаленное местоположение. Может кто-нибудь определить, что не так?
while (bytesRemaining > 0)
{
if (!sw.CanRead)
{
sw = File.OpenRead(txtFileUpload.Text);
if (offset > 0)
sw.Seek(offset, SeekOrigin.Begin);
}
int count = sw.Read(buffer, 0, (int) chunk);
request =
(HttpWebRequest)
WebRequest.Create("http://xxxxxx.com/write/" +
offset);
request.Method = "POST";
request.ReadWriteTimeout = int.MaxValue;
request.Timeout = int.MaxValue;
request.KeepAlive = false;
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
request.ContentType = "multipart/form-data; boundary=" + boundary;
var postData = new MemoryStream();
const string newLine = "\r\n";
var sw3 = new StreamWriter(postData);
sw3.Write("--" + boundary + newLine);
sw3.Write("Content-Disposition: form-data;name=\"{0}\";filename=\"{1}\"{2}", "upload",
txtFileName.Text, newLine);
sw3.Write("Content-Type: multipart/form-data " + newLine + newLine);
sw3.Flush();
postData.Write(buffer, 0, count);
sw3.Write(newLine);
sw3.Write("--{0}--{1}", boundary, newLine);
sw3.Flush();
request.ContentLength = postData.Length;
using (Stream s = request.GetRequestStream())
postData.WriteTo(s);
sw3.Write("--" + boundary + newLine);
sw3.Write("Content-Disposition: form-data;name=\"\"" + newLine);
sw3.Write("content-type:octet-stream;charset=windows-1250" + newLine);
sw3.Write("VALUE" + newLine);
sw3.Write("--{0}--{1}", boundary, newLine);
sw3.Flush();
postData.Close();
// These next 3 lines are what I had before, instead of all the previous
// code, which worked when uploading a file from the server to the remote
// location.
//using (Stream sw2 = request.GetRequestStream())
//{
// sw2.Write(buffer, 0, count);
//}
using (WebResponse resp = request.GetResponse())
{
resp.Close();
}
offset += count;
bytesRemaining -= count;
}
1 ответ
Зачем изобретать велосипед? использование
WebClient.UploadFile
http://msdn.microsoft.com/en-us/library/system.net.webclient.uploadfile(v=vs.71).aspx
У них даже есть пример.