2015-06-16 3 views
1

Я отправляю изображение с Android на C# webservice. Я всегда получаю черное изображение. Может ли кто-нибудь помочь?Отправка изображения с Android на C# webservice

Android сторона:

public void save(View v) {   
     mBitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);   
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     mBitmap.compress(Bitmap.CompressFormat.JPEG,40, outputStream); 
     byte[] imgByte = outputStream.toByteArray(); 
     String base64Str = Base64.encodeToString(imgByte, Base64.DEFAULT); 
     // Send base64Str to server 
} 

C# стороне:

[WebMethod] 
public void GetImage(string base64ImageStr) 
{   
     byte[] imageBytes = Convert.FromBase64String(base64ImageStr); 
     //Save imageBytes to DB     
} 

Я звоню его из БД:

public ActionResult Image(){ 
     var bytes=GetBytesArrayFromDB(id); 
     return File(bytes, "image/jpeg"); 
    } 

в Вид:

<img src='@Url.Action("Image")' alt="" /> 
+0

Hi @zaza. Меня также интересует эта проблема. Но у меня возникли проблемы с отправкой строки base64 в webservice. Потому что base64 закодированная длина строки около ~ 103 000 символов. Таким образом, стандарты HTTP не позволяют эту длину ('max length of URL is 2000'). Можете ли вы поделиться частями кода, например: '// Отправить base64Str на сервер' и' // Сохранить imageBytes в DB'. Благодарю. –

+0

Привет @MirjalalTalishinski. Я использую мыльные веб-службы – zaza

ответ

1

Я выясняю это Я не сделал Холст перед отправкой его на сервер. использовать это тоже

Холст холст = новый Холст (mBitmap); v.draw (холст);

public void save(View v) {   
      mBitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);   
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
      mBitmap.compress(Bitmap.CompressFormat.JPEG,40, outputStream); 
      byte[] imgByte = outputStream.toByteArray(); 
      String base64Str = Base64.encodeToString(imgByte, Base64.DEFAULT); 

      Canvas canvas = new Canvas(mBitmap); 
      v.draw(canvas); 

      // Send base64Str to server 
    } 

// отправить base64Str на сервер

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.PropertyInfo; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
public class CallSoap 
{ 
    public final String SOAP_ACTION = //url; 
    public final String OPERATION_NAME = "name of action"; 
    public final String WSDL_TARGET_NAMESPACE = "asmx url"; 
    public final String SOAP_ADDRESS = "soap address"; 
public CallSoap() 
{ 
} 
public String Call(String base64Str) 
{ 
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME); 

    PropertyInfo pi=new PropertyInfo(); 
    pi.setName("base64Str"); 
    pi.setValue(base64Str); 
    pi.setType(String.class); 
    request.addProperty(pi); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); 
    Object response=null; 
    try 
    { 
     httpTransport.call(SOAP_ACTION, envelope); 
     response = envelope.getResponse(); 
    } 
    catch (Exception exception) 
    { 
     response=exception.toString(); 
    } 
    return response.toString(); 
} 

}

Смежные вопросы