2010-10-14 13 views
0

Comment appeler un Webservice avec un paramètre byte []? Essayé en utilisant les namedvaluepairs, mais ils prennent seulement des chaînes. Je n'utilise pas le Ksoap2, nous avons décidé d'utiliser la méthode HttpClient/HttpPost.Android - Comment passez-vous un octet [] à un Webservice .net en utilisant HttpClient/HttpPost?

Vous avez des idées?

Voici mon code:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    // WORKS WITH JPEG FILE -- String existingFileName = "/sdcard/dcim/Camera/1225231027592.jpg"; 
    String existingFileName = "/sdcard/dcim/0217175.jpg"; 
    String mMyFilename = "0217175.jpg"; 

    // /sdcard/Music/kryptonite.mp3"; //DOES NOT WORK WITH MP3 FILE 

    File uploadFile = new File(existingFileName); 
    FileInputStream fileInputStream = null; 
    try { 
     fileInputStream = new FileInputStream(uploadFile); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 



    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    String mTest; 
    String Method = null; 

    try 
    { 

     //******************************************************************** 
     // Create the HttpClient and the HttpPost 
     //  Note: Need to use HttpPost because of arguments/parameters 
     //******************************************************************** 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost request = new HttpPost(); 


     fileInputStream = new FileInputStream(uploadFile); 

     // create a buffer of maximum size 
     int bytesAvailable = fileInputStream.available(); 
     int maxBufferSize = 1024; 
     int bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     byte[] buffer = new byte[bufferSize]; 

     // read file and write it into form... 
     int bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

     //************************************************************* 
     //Add Value Pairs for Parameters to pass to the Webservice 
     //************************************************************* 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 



     //nameValuePairs.add(new BasicNameValuePair(buffer)); 

     nameValuePairs.add(new BasicNameValuePair("filename", mMyFilename)); 






    } 
    catch (MalformedURLException ex) { 
     // Log.e(Tag, "error: " + ex.getMessage(), ex); 
    } 
    catch (IOException ioe) { 
     String s = ""; 

     //Log.e(Tag, "error: " + ioe.getMessage(), ioe); 
    } 
} 

}

Le Service Web:

[WebMethod] 
public void PutFile(byte[] buffer, string filename) 
{ 
    string serverpath; 

    //serverpath = @"\\63.237.52.201\UploadFiles\Incoming\"; 
    serverpath = @"C:\Temp\"; 

    //BinaryWriter binWriter = new BinaryWriter(File.Open(Server.MapPath(filename), FileMode.CreateNew, FileAccess.ReadWrite)); 
    BinaryWriter binWriter = new BinaryWriter(File.Open(serverpath + filename, FileMode.CreateNew, FileAccess.ReadWrite)); 
    binWriter.Write(buffer); 
    binWriter.Close(); 
} 

Répondre

0

Vous pouvez le convertir en une représentation base64 et envoyer l'octet [] comme une chaîne. Puis le récupérer du côté serveur. Juste au cas où vous ne trouvez pas une meilleure approche.

+0

Ok - J'essaie le base64 sur le webservice et le fichier est créé, mais quand vous essayez d'ouvrir le fichier jpg il n'y a rien. – Tom

+0

code: chaîne Base64EncodedData = Base64.encodeToString (buffer, 0) \t \t Liste nameValuePairs = new ArrayList (2); \t \t nomValuePairs.add (nouveau BasicNameValuePair ("base64data", Base64EncodedData)); \t \t nameValuePairs.add (new BasicNameValuePair ("nom_fichier", mMyFilename)); – Tom

+0

Webservice: byte [] buffer = Convert.FromBase64String (base64data); File.WriteAllBytes (fullfilename_and_path, buffer); – Tom