1.点击获取设备文件(当前上传的excel文件)
Intent intent=new Intent(Intent.ACTION_GET_CONTENT); intent.setType("application/*/*");//无类型限制 intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent,1);
在onActiivtyForResult方法中通过data.getData方法获取Uri
通过uri.getPath方法获取文件对应的绝对路径
问题:当前路径含有raw:字样,这种路径是不符合要求的,需要截取冒号以后的路径
2.选择文件后做文件上传
遇到的问题,请求返回了200,但是没有返回结果,
原因分析:请求体没有加
请求头和请求体必须要加
请求头(这个很重要)
con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
请求体(这个也必须要设置) ds.writeBytes("Content-Disposition: form-data; " + "name=\"file\";filename=\"" + file1.getName() + "\"" + end);
http构成
核心代码如下:
private void upLoadFile(String serverUrl, String strFile) {
File file1=new File(strFile);
String end = "\r\n";
String twoHyphens = "--";
// String boundary = "*****";
String boundary = "----WebKitFormBoundaryGbm6yYc5V2yilQRE";
try {
URL url=new URL(serverUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setConnectTimeout(50000);
con.setReadTimeout(50000);
/* 设置传送的method=POST */
con.setRequestMethod("POST");
/* setRequestProperty */
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Cookie", "custom.name="+ SpfUtils.getSpfSaveStr(Constant.sessionId));
con.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
con.connect();
// 设置DataOutputStream
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; " +
"name=\"file\";filename=\"" +
file1.getName() + "\"" + end);
/* Log.i("Disposition","Content-Disposition: form-data; " +
"name=\"file\";filename=\"" +
file1.getName() + "\"" + end);*/
/* ds.writeBytes("Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");*/
ds.writeBytes(end);
// 取得文件的FileInputStream
file=new File(strFile);
FileInputStream fStream = new FileInputStream(file);
// 设置每次写入1024bytes
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
// 从文件读取数据至缓冲区
while ((length = fStream.read(buffer)) != -1) {
// 将资料写入DataOutputStream中
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
ds.flush();
fStream.close();
ds.close();
if(con.getResponseCode() == 200){
Log.i("文件上传成功!上传文件为:" , con.getResponseCode()+strFile+"ftg="+con.getResponseMessage());
InputStream inputStream=con.getInputStream();
StringBuffer sb1 = new StringBuffer();
int ss;
while ((ss = inputStream.read()) != -1) {
sb1.append((char) ss);
}
String result = sb1.toString();
JSONObject shop_user = JSON.parseObject(result);
returnPath= JSON.parseObject(shop_user.getString("resultData")).getString("filePath");
ll_file.setVisibility(View.VISIBLE);
file_name.setText(file.getName());
}
/* String strFileName = strFile.substring(strFile.lastIndexOf("/") + 1);
*//* 设置DataOutputStream *//*
DataOutputStream ds =
new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; " +
"name=\"file1\";filename=\"" +
strFileName + "\"" + end);
ds.writeBytes(end);
*//* 取得文件的FileInputStream *//*
FileInputStream fStream = new FileInputStream(strFile);
*//* 设置每次写入1024bytes *//*
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
*//* 从文件读取数据至缓冲区 *//*
while ((length = fStream.read(buffer)) != -1) {
*//* 将资料写入DataOutputStream中 *//*
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
*//* close streams *//*
fStream.close();
ds.flush();
*//* 取得Response内容 *//*
InputStream is = con.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while ((ch = is.read()) != -1) {
b.append((char) ch);
}
*//* 关闭DataOutputStream *//*
ds.close();
is.close();
if(con.getResponseCode() == 200){
Log.i("文件上传成功!上传文件为:" , strFile);
}*/
} catch (Exception e) {
e.printStackTrace();
Log.i("上传失败",strFile);
Log.i("原因",e.toString());
}
}
参考链接:https://blog.csdn.net/lizhengwei1989/article/details/75635261