110,502
社区成员
发帖
与我相关
我的任务
分享
<?php
$txt = $_POST['data'];
echo $txt;
?>
string url = "http://localhost:8080/am_sync_data.php";
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "abc.txt");
string path1 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "abc1.txt");
var data = File.ReadAllBytes(path);
//var txt = File.ReadAllText(path);
// 采用.NET提供的GZipStream压缩
var comData = GZipUtils.Compress(data);
using (WebClient client = new WebClient())
{
// 构造传输参数,压缩数据转换未Base64字符串
var value = Convert.ToBase64String(comData);
var param = string.Format("data={0}", value);
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
var resStr = client.UploadString(url, param);
// Base64字符串转换回压缩数据
var resData = Convert.FromBase64String(resStr);
File.WriteAllBytes(path1, resData);
}
var filename = "九阴真经";
new WebClient().UploadData("http://www.abc.com/upload?f=" + HttpUtility.UrlEncode(filename), comData);
这样就行了。
个别参数放到 url 参数中,而消息体直接放二进制信息内容。不用转来转去地耗费时间。 var value = HttpUtility.UrlEncoide( Convert.ToBase64String(comData));
这样的处理,才能当作 post 数据。
这是你对协议中的“数值”理解不正确造成的。
假设你的服务器端将整个 Request Body 作为数据,其实更好。那么你在客户端就简单地写new WebClient().UploadData("http://localhost:8080/am_sync_data.php", comData);
就行了。
可见你的服务器设计太复杂了,反而要弄一个 data 参数,多此一举。