WebClient UploadFile会破坏二进制数据

时间:2012-08-03 15:34:44

标签: c# php xamarin.ios webclient

我正在尝试使用MonotouchiPad应用程序中运行的PHP应用程序中的二进制文件(照片)同步到我们的Webclient服务器(Windows)。正在发送和接收文件,但二进制文件在服务器上似乎已损坏,无法查看。

以下是客户端代码:

static void UploadPhotos()
{
    WebClient client = new WebClient ();
    client.Headers.Add("Content-Type","application/octet-stream");
    string sUri = GetUri();
    client.UploadFile (sUri, "POST", "images/test.png");
}

这是服务器上的PHP代码:

<?php
$uploadDir = "C:\\uploaddir\\";
foreach ($_FILES as $file_name => $file_array) {
    $uploadFile = $uploadDir . $file_array['name'];
    move_uploaded_file($file_array['tmp_name'], $uploadFile);
}
?>

有没有人知道为什么二进制数据在上传中被破坏以及如何修复它?

更新

确实非常奇怪。似乎我遇到的问题仅影响png图像; jpeg图片似乎正确无误。 jpeg图像在服务器上的Windows资源管理器中正确显示图像尺寸,我可以预览jpeg图像。我测试的jpeg图像大约为90 KB。但png文件未正确发送。在Windows资源管理器中,png文件不显示图像的尺寸,无法预览。服务器上的png文件大小较大。因此,例如,我使用以下png图片:

http://tuxpaint.org/stamps/stamps/animals/birds/cartoon/tux.png

初始文件为40.2 KB(41236字节);传输后,服务器上的文件大小为45.3 KB(46468字节)。任何人都有任何想法如何发生这种情况?

2 个答案:

答案 0 :(得分:2)

尝试将Content-Type设置为“application / octet-stream”,我认为二进制数据更常见,服务器可能无法识别二进制/八位字节流。

答案 1 :(得分:0)

我不得不使用UploadDataAsync

 using (WebClient client = new WebClient())
        {
           client.Credentials = CredentialCache.DefaultCredentials; 
           byte[] bytes = File.ReadAllBytes(filePath);
           client.UploadDataAsync(new Uri(url), bytes);
        }