1

我正在尝试将二进制文件(照片)从运行Monotouch在. 正在发送和接收文件,但服务器上的二进制文件似乎已损坏,无法查看。iPadPHPWebclient

这是客户端代码:

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图像似乎正确地出现。图像在服务器上的jpegWindows 资源管理器中正确显示图像尺寸,我可以预览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 字节)。任何人都知道这怎么会发生?

4

2 回答 2

2

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

于 2012-08-03T15:59:40.100 回答
0

我不得不使用 UploadDataAsync

 using (WebClient client = new WebClient())
        {
           client.Credentials = CredentialCache.DefaultCredentials; 
           byte[] bytes = File.ReadAllBytes(filePath);
           client.UploadDataAsync(new Uri(url), bytes);
        }
于 2017-04-06T20:12:57.653 回答