2012-02-22 33 views
5

Tôi đang phát triển một ứng dụng Android có thể gửi hình ảnh đến Dịch vụ web ASP.NET của tôi nơi hình ảnh sẽ được lưu dưới dạng tệp. Tôi đã nhìn thấy một vài cách để làm điều này và tôi đã đi cho điều này: chuyển đổi hình ảnh thành một mảng byte -> chuyển đổi mảng byte thành chuỗi -> gửi chuỗi đến dịch vụ web bằng cách sử dụng KSOAP2 -> nhận chuỗi tại Web Service -> chuyển nó sang một mảng byte -> Lưu nó như là một hình ảnh:Gửi hình ảnh từ Android đến Dịch vụ web ASP.NET

IVtest = (ImageView)findViewById(R.id.carticon); 
BitmapDrawable drawable = (BitmapDrawable) IVtest.getDrawable(); 
    Bitmap bitmap = drawable.getBitmap(); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    byte[] data = baos.toByteArray(); 
    ImageView image=new ImageView(this); 
    image.setImageBitmap(bmp); 
    String strBase64 = Base64.encode(data); 

Sau đó, tôi gửi strBase64 với dịch vụ web. Trong Web Service Tôi có điều này:

public Image ConvertToImage(byte[] image) 
{ 
    MemoryStream ms = new MemoryStream(image); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

[WebMethod] 
public String UploadImage(String image, String name) 
{ 
    byte[] image_byte = Encoding.Unicode.GetBytes(image); 
    Image convertedImage = ConvertToImage(image_byte); 
    try { 
     convertedImage.Save(Server.MapPath("generated_image.jpg"),  System.Drawing.Imaging.ImageFormat.Jpeg); 
    } catch (Exception e) { 
     return e.Message; 
    } 
    return "Success"; 
} 

tôi nhận được một lỗi ở dòng này: Image returnImage = Image.FromStream(ms);

Đây là lỗi tôi nhận được:

SoapFault - faultcode: 'soap:Server' faultstring: 'System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.ArgumentException: Parameter is not valid. 
    at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) 
    at System.Drawing.Image.FromStream(Stream stream) 
    at Service.ConvertToImage(Byte[] image) in e:\FTP\nvm\Service.asmx:line 1366 
    at Service.UploadImage(String image, String name) in e:\FTP\nvm\Service.asmx:line 1374 
    --- End of inner exception stack trace ---' faultactor: 'null' detail: [email protected] 

Cảm ơn

Trả lời

5

Có vẻ như có gì đó không ổn với chuyển đổi của bạn từ chuỗi thành hình ảnh. Ngoài ra, bạn không phải xử lý luồng của bạn sẽ làm rò rỉ bộ nhớ.

Hãy thử điều này thay vì:

private Image Base64ToImage(string base64String) 
    { 
     // Convert Base64 String to byte[] 
     byte[] imageBytes = Convert.FromBase64String(base64String); 
     using (var ms = new MemoryStream(imageBytes, 0, 
             imageBytes.Length)) 
     { 
      // Convert byte[] to Image 
      ms.Write(imageBytes, 0, imageBytes.Length); 
      Image image = Image.FromStream(ms, true); 
      return image; 
     } 
    } 
+0

Cảm ơn rất nhiều, mà đã làm các công việc. Hình ảnh cuối cùng trên máy chủ :) – ice

Các vấn đề liên quan