OKHttp3上传图片到服务器
本篇文章介绍了关于okhttp3上传用户头像到服务器
代码块
public class ImgagePhoneoActivity extends AppCompatActivity {
private static final int REQUEST_CHOOSE_IMAGE = 0x01;
private static final int REQUEST_WRITE_EXTERNAL_PERMISSION_GRANT = 0xff;
private TextView photoPath;
private ImageView photo;
String image_path;
private File file;
Uri uri;
private final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.iiiiii);
findViewById(R.id.choose_image_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
prepareToOpenAlbum();//进入相册方法
}
});
//用户头像
photo = (ImageView) findViewById(R.id.photo);
}
private void prepareToOpenAlbum() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_PERMISSION_GRANT);
} else {
openAlbum();
}
}
//跳转到相册
private void openAlbum() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CHOOSE_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CHOOSE_IMAGE && resultCode == RESULT_OK) {
//获取图片的uri
uri= data.getData();
//图片的绝对路径
image_path = ImageUtils.getRealPathFromUri(this, uri);
Bitmap bitmap = BitmapFactory.decodeFile(image_path);
photo.setImageBitmap(bitmap);
file = new File(image_path);
//选取完图片后调用上传方法,将图片路径放入参数中
sendStudentInfoToServer(file);
}
super.onActivityResult(requestCode, resultCode, data);
}
private void sendStudentInfoToServer( File file) {
//接口地址
String urlAddress = "http://116.62.130.5:80/sjb/portal/login/img";
if (file != null && file.exists()) {
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("files", "img" + "_" + System.currentTimeMillis() + ".jpg",
RequestBody.create(MEDIA_TYPE_PNG, file));
HttpUtil.sendMultipart(urlAddress, builder.build(), new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Log.e("---", "onResponse: 成功上传图片之后服务器的返回数据:" + result);
//result就是图片服务器返回的图片地址。
}
});
}
}
}
HttpUtil 代码:
public class HttpUtil {
private static OkHttpClient okHttpClient = new OkHttpClient();
private static Request.Builder builder = new Request.Builder();
/**
* 发送OkHttp GET 请求的方法
*
* @param url url形式参数
* @param callback 回调
*/
public static void sendOkHttpGetRequest(String url, Callback callback) {
Request request = builder.url(url).build();
okHttpClient.newCall(request).enqueue(callback);
}
/**
* 发送OkHttp POST 请求的方法
*
* @param urlAddress url地址
* @param requestBody 请求体
* @param callback 回调
*/
public static void sendOkHttpPostRequest(String urlAddress, RequestBody requestBody, Callback callback) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(urlAddress).post(requestBody).build();
okHttpClient.newCall(request).enqueue(callback);
}
public static void sendMultipart(String urlAddress, RequestBody requestBody, Callback callback) {
//这里根据需求传,不需要可以注释掉
// RequestBody requestBody = new MultipartBody.Builder()
// .setType(MultipartBody.FORM)
// .addFormDataPart("title", "wangshu")
// .addFormDataPart("image", "wangshu.jpg",
// RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg")))
// .build();
// private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
Request request = new Request.Builder().header("Authorization", "Client-ID " + "...").url(urlAddress).post(requestBody).build();
okHttpClient.newCall(request).enqueue(callback);
}