我试图将一个jpeg图片上传到PHP脚本。这是我的控制台应用程序program.cs
:WebClient.UploadValues没有在c#中发布帖子请求
class Program
{
static void Main(string[] args)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
string result = UploadHandler.Post(
"http://localhost/upload_test",
"frame.jpg"
);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds/10);
Console.WriteLine("Result : {0}", result);
Console.WriteLine("File uploaded in : {0}", elapsedTime);
Console.ReadKey();
}
}
这是我的UploadHandler
类:
class UploadHandler
{
public static string Post(string serverUrl, string filePath)
{
string result = "";
using (WebClient client = new WebClient())
{
byte[] response = client.UploadValues(serverUrl, new NameValueCollection()
{
{ "frameData", ToBase64(filePath) }
});
result = Encoding.Default.GetString(response);
}
return result;
}
private static string ToBase64(string filePath)
{
return Convert.ToBase64String(
File.ReadAllBytes(filePath)
);
}
}
,这是我的PHP脚本接收上传:
<?php
if (count($_POST) && isset($_POST['frameData']))
{
file_put_contents('frame.jpg', base64_decode($_POST['frameData']));
exit("OK");
}
else
{
print_r($_POST);
exit("INVALID REQUEST");
}
这是响应我获得:
任何想法,为什么这可能是?看来C#应用程序没有发出HTTP POST请求。
尝试使用Fiddler之类的东西来查看您的请求。 – germi 2015-02-23 11:30:01
我用'Wireshark'来监视所有的HTTP请求,并做了一个测试,我根本没有收到任何HTTP请求......这看起来很奇怪,因为我得到了回应。 – Latheesan 2015-02-23 11:32:57
这种情况下的服务器与.Net应用程序在同一台机器上吗?在这种情况下,您需要通过计算机名称来寻址服务器,而不是'localhost',因为在处理'localhost'时.Net并不真正通过网络接口发送任何东西。见[这个问题](http://stackoverflow.com/questions/25836655/cant-see-webclient-post-request-in-fiddler)。 – germi 2015-02-23 12:37:44