Upload HTTPWebrequest (parçalı/-veri formu)ile dosyaları
Orada benimle dosya yüklemek için yardımcı olacak herhangi bir sınıf, kütüphane veya kod parçasıHTTPWebrequest?
Edit 2:
Bir WebDAV klasörüne falan yüklemek istemiyorum. Bir tarayıcı taklit, avatar yükleme gibi bir forum veya bir web uygulamasında form üzerinden bir dosya upload etmek istiyorum. Çok parçalı/kullanan bir form yüklemek için veri formu.
Düzenleme:
Professional (Service benim gereksinimlerini karşılamak değil, bir çözüm arıyorumHTTPWebrequest.
CEVAP
Yukarıdaki kodu alıp İç Sunucu atar çünkü Sabit Hata 500. \R\n kötü yerleştirilmiş olan bazı sorunlar ve benzeri alanlarda var. Bellek akışı ile yeniden düzenleme, talebi doğrudan stream yazma uygulamalı. İşte sonuç:
public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc) {
log.Debug(string.Format("Uploading {0} to {1}", file, url));
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);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, paramName, file, contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(file, 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();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" boundary "--\r\n");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try {
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
log.Debug(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
} catch(Exception ex) {
log.Error("Error uploading file", ex);
if(wresp != null) {
wresp.Close();
wresp = null;
}
} finally {
wr = null;
}
}
ve örnek kullanım:
NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "TTR");
nvc.Add("btn-submit-photo", "Upload");
HttpUploadFile("http://your.server.com/upload",
@"C:\test\test.jpg", "file", "image/jpeg", nvc);
Birden fazla dosya işlemek ya da sadece her dosya için birden çok kez aramak için genişletilmiş olabilir. Ancak bu sizin ihtiyaçlarınıza uygun.
&Quot;çok parçalı/-veri formu gönderme...
Kullanarak dosyaları upload SONRASI ve...
Çok parçalı/sınır-veri formu nedir?...
Bir formda veri ve Ajax kullanarak dos...
Okuma Sonrası Veri ASP.Net Formu tesli...