为什么在我将图像上传到Azure后我无法访问它?

时间:2015-04-30 06:52:28

标签: php azure windows-runtime windows-phone-8.1 image-uploading

我正在开发适用于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;
    }
}

感谢您丰富的知识和经验。

1 个答案:

答案 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存储的另一种选择。最后,如果您加载大文件,您可能希望查看以块为单位的上传。

〜干杯