我正在尝试使用Monotouch
将iPad
应用程序中运行的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字节)。任何人都有任何想法如何发生这种情况?
答案 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);
}