C# 如何使用多部分表单数据将图像上载到服务器
我想模仿这个请求 这是来自嗅探器的日志C# 如何使用多部分表单数据将图像上载到服务器,c#,multipartform-data,C#,Multipartform Data,我想模仿这个请求 这是来自嗅探器的日志 -----------------------------708299735697 Content-Disposition: form-data; name="_file" 1.jpg -----------------------------708299735697 Content-Disposition: form-data; name="file"; filename="blob" Content-Type: image/png ‰PNG ..
-----------------------------708299735697
Content-Disposition: form-data; name="_file"
1.jpg
-----------------------------708299735697
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: image/png
‰PNG
............
这是我在csharp上的代码
var taimalda = DateTime.Now.Ticks;
var boundary = "------------------------" + taimalda ;
var newLine = Environment.NewLine;
var propFormat = "--" + boundary + newLine +
"Content-Disposition: form-data; name=\"{0}\"" + newLine + newLine +
"{1}" + newLine;
var fileHeaderFormat = "--" + boundary + newLine +
"Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
newLine + "Content-Type: image/png";
var req = (HttpWebRequest)HttpWebRequest.Create("http://xxx.ru/new_style/flash_uploader/upload.php?fileapi"+taimalda);
req.CookieContainer = s; //
System.Net.ServicePointManager.Expect100Continue = false;
req.Referer = "http://www.xxx.ru/user/setting/set_info"; // add referer
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"; // add useragent
req.Method = WebRequestMethods.Http.Post; // post request
req.ContentType = "multipart/form-data; boundary=" + boundary;
using (var reqStream = req.GetRequestStream())
{
var reqWriter = new StreamWriter(reqStream);
var tmp = string.Format(propFormat, "_file", "1.jpg");
reqWriter.Write(tmp);
tmp = string.Format(fileHeaderFormat, "file", "blob");
reqWriter.Write(tmp);
reqWriter.Flush();
}
var res = req.GetResponse();
using (var resStream = res.GetResponseStream())
{
var reader = new StreamReader(resStream);
var ext = reader.ReadToEnd();
}
但是这段代码只发送没有我的文件(1.jpg)的标题
-----------------635031060420469298
内容配置:表单数据;name=“\u文件”
1.jpg
--------------------------635031060420469298
内容配置:表单数据;name=“file”;filename=“blob”
内容类型:图像/png
我看不到您实际上在哪里读取1.jpg文件的字节并将其写入请求流。您需要将文件字节写入
流,而不是流写入器:
using (var reqStream = req.GetRequestStream())
using (var reqWriter = new StreamWriter(reqStream))
{
reqWriter.Write(propFormat, "_file", "1.jpg");
reqWriter.Write(fileHeaderFormat, "file", "blob");
int ken = fs.Read(buffer, 0, buffer.Length);
reqStream.Write(buffer, 0, ken);
reqStream.Flush();
}
也许我的代码能帮你
var client = new HttpClient();
client.BaseAddress = new Uri(BASE_URL);
var multipart = new MultipartFormDataContent();
foreach(var file in files)
{
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(file.FullName));
multipart.Add(fileContent, "files", file.Name);
}
return client.PostAsync("Images", multipart);
迟做总比不做好我无法将字节数组转换为字符数组
var client = new HttpClient();
client.BaseAddress = new Uri(BASE_URL);
var multipart = new MultipartFormDataContent();
foreach(var file in files)
{
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(file.FullName));
multipart.Add(fileContent, "files", file.Name);
}
return client.PostAsync("Images", multipart);