111,120
社区成员
发帖
与我相关
我的任务
分享
<?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);
}
[/quote]
这个当然是会的,结合7楼的解释,其实就很明白了。这里看起来除了处理+号,还要处理/号。我所问的替换用例就是怕只处理+号而遗漏了还有其他的特殊字符。我在网上搜了下相关问题,已经明白怎么处理了。
非常感谢!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 参数,多此一举。