使用webClient OpenReadAsync将图像从PHP检索到Silverlight [英] Retrieving images from PHP to Silverlight using webClient OpenReadAsync

查看:64
本文介绍了使用webClient OpenReadAsync将图像从PHP检索到Silverlight的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好

我正在建立一个网站Silverlight-PHP-SQL Server
而且我需要从服务器保存和检索图像.
从Silverlight应用程序保存图像效果很好
并从服务器检索到PHP也可以使用
(我将图像写入文件中就可以了)
但是当我尝试从PHP读取应用程序时
我得到了一些额外的字节,但无法识别为图像.

代码是:

hi all

I am building a website Silverlight - PHP - Sql Server
and i need to save and retrieve images from the server.
Saving images from the Silverlight app works fine
and retrieving from the server to PHP also works
( i write the image to a file and it is fine)
but when i try to read from the PHP to the app
i get a few extra bytes and it''s not recognised as an image.

the code is :

private void btnPhoto_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            Random random = new Random();
            WebClient webClient = new WebClient();
            webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(download_OpenReadCompleted);
            Uri myUri = new Uri("http://servername/PHP/GetUserPhoto.php?userID=1" + "&sid=" + random.Next(), UriKind.RelativeOrAbsolute);
            webClient.OpenReadAsync(myUri, "GET");
        }
        void download_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            if ((e.Cancelled != true) || (e.Result != null))
            {
                Stream stream = e.Result;
                BitmapImage loadedImage = new BitmapImage();
                stream.Position = 0;
                loadedImage.SetSource(e.Result);
                smallImage.Source = loadedImage;
            }
        } 


错误在

loadedImage.SetSource(e.Result);

{System.Exception: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
   at MS.Internal.XcpImports.BitmapSource_SetSource(BitmapSource bitmapSource, CValue& byteStream)
   at System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(Stream streamSource)
   at System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(Stream streamSource)
   at System.Windows.Media.Imaging.BitmapSource.SetSource(Stream streamSource)
   at SilverlightApplication13.MainPage.downloader_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OpenReadOperationCompleted(Object arg)}


行上
我返回的流是947个字节-应该是942个字节

有谁知道我在做什么错




php代码是:



the stream i get back is 947 bytes - it should be 942 bytes

does anyone have any ideas what i am doing wrong




the php code is:

<pre lang="php"><?php<br />
$spUserID = $_GET["userID"];<br />
<br />
$serverName = "(local)";<br />
$connectionOptions = array(''Database''=>''dbname'');<br />
<br />
$conn = sqlsrv_connect( $serverName, $connectionOptions);<br />
<br />
if( $conn === false )  {<br />
    echo "error: " . sqlsrv_errors();<br />
}<br />
<br />
else {<br />
<br />
    $tsql = "select imageData from images where userID = " . $spUserID;<br />
    $stmt = sqlsrv_query($conn, $tsql );<br />
    $result = sqlsrv_fetch( $stmt );<br />
    $stream = sqlsrv_get_field( $stmt, 0, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));<br />
<br />
    $imgfile = fopen("UploadedImages/debug3.png", "w");<br />
    while( !feof( $stream))<br />
    {<br />
        $str = fread( $stream, 2048);<br />
        $str = fread( $stream, 2048);<br />
        fwrite($imgfile, $str);<br />
        echo $str;<br />
    }<br />
    fclose($imgfile);<br />
}<br />
sqlsrv_free_stmt( $strSql );<br />
sqlsrv_close( $conn );<br />
?></pre><br />

推荐答案

spUserID =
spUserID =


_GET ["userID"];< br/> < br/>
_GET["userID"];<br /> <br />


serverName =(local)";< br/>
serverName = "(local)";<br />


这篇关于使用webClient OpenReadAsync将图像从PHP检索到Silverlight的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆