Silverlight 4图片上传问题

时间:2011-07-13 11:22:42

标签: web-services jsp silverlight-4.0

我在jsp页面中使用Silverlight4和java webervices。我想将图像保存到服务器,所以尝试使用java webservice。我使用下面的代码行但输出已损坏。我没有t understand why. Please help me. This is really important for me. When i try to open 3mb jpeg file contains "Windows Photo Viewer can打开这张照片,因为文件似乎已损坏,损坏或太大。“

客户端COde

WriteableBitmap wb = new WriteableBitmap(bitmapImage);
            byte[] bb = ToByteArray(wb);

public byte[] ToByteArray(WriteableBitmap bmp)
    {
        int[] p = bmp.Pixels;
        int len = p.Length * 4;
        byte[] result = new byte[len]; // ARGB
        Buffer.BlockCopy(p, 0, result, 0, len);
        return result;
    }

WebService代码

@WebMethod(operationName = "saveImage")
public Boolean saveImage(@WebParam(name = "img")
byte[] img, @WebParam(name = "path")
String path) {
    try{
        FileOutputStream fos = new FileOutputStream("C:\\Users\\TheIntersect\\Desktop\\sharp_serializer_dll\\saved.jpg");
        fos.write(img);
        fos.close();
        return true;
    }
    catch(Exception e){
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

我在forums.silverlight.net上找到了答案 当我尝试在Stream定义它之后调用ReadFully(Stream)时非常有趣但是当我稍后调用10行代码时它返回全0。 功能

        public static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[input.Length];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }

失败代码

using (Stream str = opd.File.OpenRead()) 
        {  
            BitmapImage bitmapImage = new BitmapImage(); 
            bitmapImage.SetSource(str); 
            image.Tag = bitmapImage.UriSource.ToString(); 
            image.Source = bitmapImage; 
            image.Width = width; 
            image.Height = height; 
            image.Stretch = Stretch.Uniform; 
            container.Child = image; 
            rtb.Selection.Insert(container); 
            ServiceReference1.webWordWebServiceClient s = new ServiceReference1.webWordWebServiceClient(); 
            byte[] bb = ReadFully(str); 
            s.saveImageCompleted += new EventHandler<ServiceReference1.saveImageCompletedEventArgs>(s_saveImageCompleted); 
            s.saveImageAsync(bb, "gungorrrr"); 

        }

成功代码

using (Stream str = opd.File.OpenRead()) 
        { 
            byte[] bb = ReadFully(str); 
            BitmapImage bitmapImage = new BitmapImage(); 
            bitmapImage.SetSource(str); 
            image.Tag = bitmapImage.UriSource.ToString(); 
            image.Source = bitmapImage; 
            image.Width = width; 
            image.Height = height; 
            image.Stretch = Stretch.Uniform; 
            container.Child = image; 
            rtb.Selection.Insert(container); 
            ServiceReference1.webWordWebServiceClient s = new ServiceReference1.webWordWebServiceClient(); 

(BitmapImage的);

            s.saveImageCompleted += new EventHandler<ServiceReference1.saveImageCompletedEventArgs>(s_saveImageCompleted); 
            s.saveImageAsync(bb, "gungorrrr"); 

        }

链接:http://forums.silverlight.net/forums/p/234126/576070.aspx#576070