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();
}
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
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
Webservice: byte [] buffer = Convert.FromBase64String (base64data); File.WriteAllBytes (fullfilename_and_path, buffer); – Tom