[英]Android - How do you pass a byte[] to a .net Webservice using HttpClient / HttpPost?
How can I call a Webservice with a byte[] parameter? 如何使用byte []参数调用Web服务? Tried using the namedvaluepairs, but they take strings only.
尝试使用namedvaluevaluespairs,但它们仅采用字符串。 I am not using the Ksoap2, we decided to use the HttpClient / HttpPost method.
我没有使用Ksoap2,我们决定使用HttpClient / HttpPost方法。
Anyone have any ideas? 有人有想法么?
Here is my 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);
}
}
} }
The Web 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();
}
You could convert it to a base64 representation and send the byte[] as an string. 您可以将其转换为base64表示形式,然后将byte []作为字符串发送。 Then recover it at the server side.
然后在服务器端恢复它。 Just in case you don't find a better approach.
以防万一您找不到更好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.