【问题标题】:WebClient UploadFile corrupts binary dataWebClient UploadFile 损坏二进制数据
【发布时间】:2017-04-07 04:12:57
【问题描述】:

我正在尝试使用Webclient 将运行在iPad 上的Monotouch 应用程序中的二进制文件(照片)同步到我们的PHP 服务器(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 字节)。有人知道这是怎么发生的吗?

【问题讨论】:

  • 文件大小是否匹配?您是否尝试过使用来自简单 Windows 客户端的相同代码进行上传?这将有助于确定问题是客户端还是服务器。您还应该尝试上传一个小文本文件 - 服务器上是否存在文件大小限制导致问题?

标签: c# php xamarin.ios webclient


【解决方案1】:

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

【讨论】:

  • 谢谢,迈克。我什至没有注意到“二进制/八位字节流”;来自某处网站的复制/粘贴。我已将其替换为“application/octet-stream”,但不幸的是它仍然无法正常工作。
  • 它似乎仍然以二进制以外的方式上传。这篇文章使用 multipart/form-data 来暗示它:stackoverflow.com/questions/10642536/…
【解决方案2】:

我不得不使用 UploadDataAsync

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多