我在jsp页面中使用Silverlight4和java webervices。我想将图像保存到服务器,因此尝试使用 java 网络服务执行此操作。我正在使用下面的代码行,但输出已损坏。我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;
}
网络服务代码
@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;
}
}
我在 forums.silverlight.net 上找到了答案当我尝试在 Stream 定义之后调用 ReadFull(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();
(位图图像(;
s.saveImageCompleted += new EventHandler<ServiceReference1.saveImageCompletedEventArgs>(s_saveImageCompleted);
s.saveImageAsync(bb, "gungorrrr");
}
链接: http://forums.silverlight.net/forums/p/234126/576070.aspx#576070