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
Post a Comment