目前,我从android应用程序向我的servlet发送一个用户名作为参数。现在我想从android应用程序发送文件到我的servlet。有可能吗? 这里是我试图通过Http发送用户名的示例代码。
try
{
URL url = new URL("http:/xx.xxx.xxx.x/sample?user=admin"); // File as parameter
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(in));
String x = "";
String total = "";
int i=0;
ArrayList<String> content = new ArrayList();
while((x = r.readLine()) != null)
{
content.add(x);
}
in.close();
r.close();
}
catch(Exception e)
{
e.printStackTrace();
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
}
上面的代码工作正常,如何将存储在SD卡中的文本文件作为参数传递给servlet?。提前感谢。
答案 0 :(得分:0)
这里有一些代码,但我强烈建议通过POST请求而不是GET请求上传数据:
private void sendFileThroughHTTP(File file) {
try {
Uri uri = new Uri.Builder().scheme("http").encodedAuthority("xx.xxx.xxx.x")
.path("sample")
.appendQueryParameter("user", "admin")
.appendQueryParameter("file", fileToString(file))
.build();
HttpGet get = new HttpGet(uri.toString());
HttpClient client = new DefaultHttpClient();
client.execute(get);
} catch (ClientProtocolException e) {
Log.e("SOME_TAG", Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("SOME_TAG", Log.getStackTraceString(e));
}
}
private String fileToString(File file) {
String resultString = "";
FileReader fileReader = null;
if (file != null && file.isFile()) {
try {
fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader);
StringBuilder stringBuilder = new StringBuilder();
String temp;
while ((temp = reader.readLine()) != null) {
stringBuilder.append(temp);
}
resultString = stringBuilder.toString();
} catch (FileNotFoundException e) {
Log.e("SOME_TAG", Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("SOME_TAG", Log.getStackTraceString(e));
} finally {
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
Log.e("SOME_TAG", Log.getStackTraceString(e));
}
}
}
return resultString;
}