2012-10-21 28 views
2

我试图做一个web服务,可以接受图像的字节[],并将其保存到网络服务器。 该代码由两部分组成,即发送数据的客户端和获取数据的Web服务。 尝试上传图像时出现以下错误: System.ServiceModel.FaultException`1 [System.ServiceModel.ExceptionDetail]:在GDI +中发生了一般性错误。C#保存图像(字节[])通过Web服务

myImage是一个System.Drawing图像。

private byte[] imageToByteArray(Image imageIn) 
    { 
     MemoryStream ms = new MemoryStream(); 
     imageIn.Save(ms,ImageFormat.Png); 
     return ms.ToArray(); 
    } 

using (Something.ClientServiceClient client = new Something.ClientServiceClient()) 
      { 
       client.Open(); 
       client.uploadScreenShot(imageToByteArray(myImage)); 
      } 

的web服务看起来如下:

public void uploadHofScreen(byte[] imgArray) 
    { 
     Image nImg = byteArrayToImage(imgArray); 
     Bitmap bitmap = new Bitmap(nImg); 
     saveJpeg("/1/test.jpg", bitmap, 85L); 
    } 


private void saveJpeg(string path, Bitmap img, long quality) 
    { 
     EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); 
     ImageCodecInfo jpegCodec = getEncoderInfo("image/jpeg"); 
     if (jpegCodec == null) 
      return; 
     EncoderParameters encoderParams = new EncoderParameters(1); 
     encoderParams.Param[0] = qualityParam; 
     img.Save("XXXX" + path, jpegCodec, encoderParams); 
    } 

    private ImageCodecInfo getEncoderInfo(string mimeType) 
    { 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 
     for (int i = 0; i < codecs.Length; i++) 
      if (codecs[i].MimeType == mimeType) 
       return codecs[i]; 
     return null; 
    } 

无论是webconfig和AppConfig中有以下readerQuotas:

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 

任何意见,什么问题?

+1

该问题不在WCF中。调试图像处理以获得更详细的错误。 –

+0

你确定这不是[重复这个](http://stackoverflow.com/questions/1781390/saving-an-image-a-generic-error-occurred-in-gdi?rq=1)? – Jeroen

+0

你的'byteArrayToImage'是怎么样的? – tofi9

回答

1

(只是拨弄一点上上传文件夹的权限,发现IIS没有写权限 - 对不起,我应该检查了才去这里)

在光明的一面,现在你可以看到如何通过web服务上传图片。 :)

+0

如果我们将公开web服务,那么发送数据块比增加readerquota更好。由于安全问题,默认情况下为低。 – Silvermind