我正在开发适用于Windows Phone 8.1的通用应用程序,但我正在使用PHP页面来识别我上传到我服务的图像中的某些模式。
我发现在将X映像上传到Azure后,我无法使用它。我正在使用WebMatrix来开发我的PHP页面,当我刷新它时,它并没有显示我上传的图像,但是当我尝试发布内容时,我选择了选项:&#34 ;删除删除服务器上不在我的计算机上的文件。" 我可以看到我的图像。这是我的PHP代码的一个例子:
$uploaddir = getcwd();
$uploadfile = $uploaddir . "/" . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
chmod($uploadfile, 0755);
$Test = new Display($_FILES['userfile']['name']);
echo '{"result": "' . $Test->getNumber($_REQUEST['color'], false) . '"}';
//unlink($uploadfile);
} else {
echo '{"result": "-1"}';
}
我想知道我的错误是什么,因为我不明白为什么我可以从网址访问,我也不能使用它,也许它是我如何分配权限,但有或没有 chmod ,它根本没有变化。我甚至尝试了其他主机,当我进入文件管理器时问题是一样的,只有我的PHP文件,它不允许我管理图像。
这是我上传图片的Windows Phone代码,如果有必要:
byte[] ConvertBitmapToByteArray()
{
WriteableBitmap bmp = bitmap;
using (Stream stream = bmp.PixelBuffer.AsStream())
{
MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}
public async Task<string> Upload()
{
try
{
using (var client = new HttpClient())
{
using (var content =
new MultipartFormDataContent())
{
byte[] data = ConvertBitmapToByteArray();
using (var stream = new InMemoryRandomAccessStream())
{
// encoder *outputs* to stream
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
// encoder's input is the bitmap's pixel data
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight,
(uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, data);
await encoder.FlushAsync();
content.Add(new StreamContent(stream.AsStream()), "userfile", fileNewImage);
using (
var message =
await client.PostAsync("http://xplace.com/uploadtest.php", content))
{
var input = await message.Content.ReadAsStringAsync();
return input;
}
}
}
}
}
catch (Exception ex)
{
return null;
}
}
感谢您丰富的知识和经验。
答案 0 :(得分:2)
创建blob存储帐户,并添加公共容器。在保存文件的操作中,将文件存储在blob存储容器中。然后,您可以像访问任何其他图像一样访问图像。
以下是Azure教程:http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/
此外,您无法在容器中创建文件夹,但可以在blobrefname上使用命名约定来创建容器的概念。此外,如果您希望URL具有某种外观,则可以将域附加到云服务。
希望这有帮助! 干杯
再次阅读您的问题 - 看起来它在客户端更多。
以下是我通常将文件附加到MultipartFormDataContent
:
MultipartFormDataContent content = new MultipartFormDataContent();
FileInfo info = new FileInfo(currFileLoc);
string contentMediaType = null;
//This is a Dictionary<string, string> that takes in the file
//extension, and returns the media type (e.g. "image/jpeg")
GlobalVariables.ApprovedMediaTypes.TryGetValue(
info.Extension.ToLower()
, out contentMediaType);
//If the dictionary doesn't return a result
//then it's not a supported file type
if (contentMediaType == null)
throw new Exception(
String.Format("The file \"{0}\" is an unsupported file type."
, info.Name));
ByteArrayContent currFile = new ByteArrayContent(File.ReadAllByte(currFileLoc));
currFile.Headers.ContentType = new MediaTypeWithQualityHeaderValue(contentMediaType);
content.Add(currFile, currFileLoc, currFileLoc);
我打电话。也许你找到了blob存储的另一种选择。最后,如果您加载大文件,您可能希望查看以块为单位的上传。
〜干杯