1.文件上传完整代码
下面是完整的文件上传代码,复制即可使用。注意要开启子线程运行
public class UploadFileTask {
/**
* 上传文件到服务器,并返回服务器相应结果
* @param requestURL 服务器的地址
* @param imageUri 文件的Uri
* @param context
* @return 服务器返回的结果
*/
public String uploadFile(String requestURL, Uri imageUri, Context context) {
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
InputStream inputStream = null;
String boundary = "*****" + System.currentTimeMillis() + "*****";
String lineEnd = "\r\n";
String twoHyphens = "--";
try {
InputStream fileInputStream = context.getContentResolver().openInputStream(imageUri);
URL url = new URL(requestURL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""
+ imageUri.getLastPathSegment() + "\"" + lineEnd);
outputStream.writeBytes(lineEnd);
int bytesAvailable = fileInputStream.available();
int bufferSize = Math.min(bytesAvailable, 1024 * 1024);
byte[] buffer = new byte[bufferSize];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer, 0, bufferSize)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
outputStream.flush();
fileInputStream.close();
outputStream.close();
// 检查服务器响应
int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
if (serverResponseCode == HttpURLConnection.HTTP_OK) {
inputStream = connection.getInputStream();
String result = convertStreamToString(inputStream);
Log.d("Upload Success", "Response: " + result);
inputStream.close();
return result;
} else {
Log.d("Upload Error", "Response Code: " + serverResponseCode + " Message: " + serverResponseMessage);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
return "";
}
private String convertStreamToString(InputStream is) {
Scanner s = new Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
}
2.测试文件上传效果
有时候我们可能没有后台服务器来测试上传效果,这时候我们可以使用postman提供的测试URL,具体看这篇文章:测试图片上传功能,使用postman提供的url