赞
踩
1.build.gradle配置(增加)
dependencies{
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'org.conscrypt:conscrypt-android:2.5.1'
}
2.AndroidManifest.xml配置权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在application里面添加android:usesCleartextTraffic="true"
3.安卓前端部分
3.1xml样式界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/btn"
android:layout_width="150dp"
android:layout_height="100dp"
android:text="上传"/>
</LinearLayout>
3.2安卓后台代码MainActivity
package com.example.upload;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String result = "{\"data\": \"0\"}";
new Thread(new Runnable(){
@Override
public void run() {
String img = Environment.getExternalStorageDirectory()+"/1/123456789.png";
String url = "http://192.168.0.103:8019/uploadAudio";
try {
uploadImage(url,img);
} catch (IOException e) {
Looper.prepare();
e.printStackTrace();
Looper.loop();
} catch (JSONException e) {
e.printStackTrace();
}
//创建信息对象
Message message = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("data",result);
message.setData(bundle);//向主线程发信息
addTrackHandler.sendMessage(message);
}
}).start();
}
});
}
/**
* 上传图片
* @param url
* @param imagePath 图片路径
* @return 新图片的路径
* @throws IOException
* @throws JSONException
*/
public static String uploadImage(String url, String imagePath) throws IOException, JSONException {
OkHttpClient okHttpClient = new OkHttpClient();
File file = new File(imagePath);
RequestBody image = RequestBody.create(MediaType.parse("image/png"), file);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", imagePath, image)
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = okHttpClient.newCall(request).execute();
JSONObject jsonObject = new JSONObject(response.body().string());
return jsonObject.optString("image");
}
Handler addTrackHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
String result = "";
try {
result = message.getData().getString("data");
Toast.makeText(MainActivity.this, "新增成功", Toast.LENGTH_SHORT).show();
}catch (Exception e){
}
//Toast.makeText(MainActivity.this, "调用成功"+result, Toast.LENGTH_SHORT).show();//测试弹框
return true;
}
});
}
4.spring boot后台接受图片并写入本地路径
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@RequestMapping("/uploadAudio")
@ResponseBody
public void uploadAudio(@RequestParam MultipartFile file) {
System.out.println(file.getOriginalFilename());
if (!file.isEmpty()) {
String filename = file.getOriginalFilename();
System.out.println("Load fn:" + filename);
try {
String fileurl = "d:/Download/testt.png";
File f = new File(fileurl);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
if (!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
out.write(file.getBytes());
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}else {
System.out.println("上传失败,因为文件是空的.");
}
}
注:如果上传图片提示没有权限,则长按apk图标,打开读取本地文件的权限即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。