Using asp.net WebService & Android to upload Image to Azure Blob Storage? -


i'm trying upload selected image azure blob android device through

a asp.net webservice i've made.

but orange error in android: "w/system.err(454): soapfault - faultcode: 'soap:server' faultstring: 'server unable process request. ---> object reference not set instance of object.' faultactor: 'null' detail: org.kxml2.kdom.node@4205f358 "

i'm not sure if it's java code or webservice witch wrong...

here both codes:

webservice:

    [webmethod]     public string uploadfile(string mybase64string, string filename)     {         byte[] f = convert.frombase64string(mybase64string);          cloudstorageaccount storageaccount = cloudstorageaccount.parse(         configurationmanager.connectionstrings["storageconnectionstring"].connectionstring);          cloudblobclient blobclient = storageaccount.createcloudblobclient();         // retrieve reference container.          cloudblobcontainer container = blobclient.getcontainerreference("mycontainer");          // create container if doesn't exist.         container.createifnotexists();          container.setpermissions(          new blobcontainerpermissions          {              publicaccess = blobcontainerpublicaccesstype.blob          });          // retrieve reference blob named "myblob".         cloudblockblob blockblob = container.getblockblobreference(filename);          using (memorystream stream = new memorystream(f))         {             blockblob.uploadfromstream(stream);         }          return "ok";     } 

i have tested code in forms .net, , works fine when parsing base64 string , converting byte[]. don't think it's webservice code that's wrong..

pleas me!

here java->android:

private string tag = "pgguru"; uri currimageuri;     string encodedimage;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      // open gallery browser             intent intent = new intent();             intent.settype("image/*");             intent.setaction(intent.action_get_content);             startactivityforresult(intent.createchooser(intent, "select picture"),1); }  byte[] b; @override public void onactivityresult(int requestcode, int resultcode, intent data) {           if (resultcode == result_ok) {                  if (requestcode == 1) {                         // currimageuri global variable i'm using hold content:// uri of image                         currimageuri = data.getdata();                         string imageuri = getrealpathfromuri(currimageuri);                          bitmap bm = bitmapfactory.decodefile(imageuri);                         bytearrayoutputstream baos = new bytearrayoutputstream();                           bm.compress(bitmap.compressformat.jpeg, 100, baos); //bm bitmap object                            b = baos.tobytearray();                              //encoded image base64                         encodedimage = base64.encodetostring(b, base64.default);                        //create instance asynccallws                         asynccallws task = new asynccallws();                         task.execute();                 }         } }  public void uploadimage(string image, string imagename) {     //create request     soapobject request = new soapobject(namespace, method_name);     //property holds input parameters     propertyinfo pi = new propertyinfo();     pi.setname("mybase64string");     pi.setvalue(image);     pi.settype(string.class);     request.addproperty(pi);      pi=new propertyinfo();     pi.setname("filename");     pi.setvalue(imagename);     pi.settype(string.class);     request.addproperty(pi);      //create envelope     soapserializationenvelope envelope = new soapserializationenvelope(             soapenvelope.ver11);     envelope.dotnet = true;     //set output soap object     envelope.setoutputsoapobject(request);     //create http call object     httptransportse androidhttptransport = new httptransportse(url);      try {         //invole web service         androidhttptransport.call(soap_action, envelope);         //get response         soapprimitive response = (soapprimitive) envelope.getresponse();         //assign fahren static variable       } catch (exception e) {         e.printstacktrace();     } }   private class asynccallws extends asynctask<string, void, void> {     @override     protected void doinbackground(string... params) {         log.i(tag, "doinbackground");         uploadimage(encodedimage, "randomname");         return null;     }      @override     protected void onpostexecute(void result) {         log.i(tag, "onpostexecute");      }      @override     protected void onpreexecute() {         log.i(tag, "onpreexecute");      }      @override     protected void onprogressupdate(void... values) {         log.i(tag, "onprogressupdate");     }  } 

ps: have granted uses-permission internet,write_external_storage , record_audio

finally solved problem :d wihu!

in webservice had change:

cloudstorageaccount storageaccount = cloudstorageaccount.parse( configurationmanager.getsetting("storageconnectionstring")); 

to this(almost same):

cloudstorageaccount storageaccount = cloudstorageaccount.parse( cloudconfigurationmanager.getsetting("storageconnectionstring")); 

and go => 'manage nuget packages' in vs12, , install windows azure storage.

further more had move variable: byte[] f = convert.frombase64string(mybase64string);

outside of method, this:

    byte[] f;     [webmethod]     public string uploadfile(string mybase64string, string filename)     {          f = convert.frombase64string(mybase64string);     } 

and it.

so webservice this:

byte[] f;     [webmethod]     public string uploadfile(string mybase64string, string filename)     {         f = convert.frombase64string(mybase64string);           cloudstorageaccount storageaccount = cloudstorageaccount.parse(         cloudconfigurationmanager.getsetting("storageconnectionstring"));          cloudblobclient blobclient = storageaccount.createcloudblobclient();         // retrieve reference container.          cloudblobcontainer container = blobclient.getcontainerreference("mycontainer");          // create container if doesn't exist.         container.createifnotexists();          container.setpermissions(          new blobcontainerpermissions          {              publicaccess = blobcontainerpublicaccesstype.blob          });          // retrieve reference blob named "myblob".         cloudblockblob blockblob = container.getblockblobreference(filename);          using (memorystream stream = new memorystream(f))         {             blockblob.uploadfromstream(stream);         }         return "ok";     } 

this send image bytearray windows azure storage.

next step download file , convert bitmap image :)

if helpfull please give me points :d


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -