其中的错误原因可能是编码问题。以下示例代码演示了如何将文件上传到服务器,并使用multipart/form-data进行POST:
private void uploadFile(String filePath, String uploadUrl) {
try {
// 创建文件
File file = new File(filePath);
// 设置请求路径
URL url = new URL(uploadUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方式
conn.setRequestMethod("POST");
// 设置请求头
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
// 设置字符集
conn.setRequestProperty("Charset", "UTF-8");
// 设置请求超时时间
conn.setConnectTimeout(15000);
conn.setReadTimeout(15000);
// 获取输出流
OutputStream outStream = conn.getOutputStream();
// 设置上传参数
StringBuilder sb = new StringBuilder();
sb.append("--").append(BOUNDARY).append("\r\n");
sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"\r\n");
sb.append("Content-Type: application/octet-stream\r\n\r\n");
outStream.write(sb.toString().getBytes());
// 读取文件数据
InputStream inStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
outStream.write("\r\n".getBytes());
// 结束标志
byte[] endData = ("--" + BOUNDARY + "--\r\n").getBytes();
outStream.write(endData);
outStream.flush();
// 获取服务器返回信息
int res = conn.getResponseCode();
if (res == 200) {
InputStream inputStream = conn.getInputStream();
String result = streamToString(inputStream);
Log.i(TAG, "uploadFile result: " + result);
}
outStream.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
//