android?studio實(shí)現(xiàn)上傳圖片到j(luò)ava服務(wù)器
本文實(shí)例為大家分享了android studio上傳圖片到j(luò)ava服務(wù)器的具體代碼,供大家參考,具體內(nèi)容如下
1.build.gradle配置(增加)
dependencies{
?? ??implementation 'com.squareup.okhttp3:okhttp:4.9.0'
? ? ?implementation 'org.conscrypt:conscrypt-android:2.5.1'
?? ??? ?}2.AndroidManifest.xml配置權(quán)限
<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安卓后臺(tái)代碼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();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? //創(chuàng)建信息對(duì)象
? ? ? ? ? ? ? ? ? ? ? ? Message message = Message.obtain();
? ? ? ? ? ? ? ? ? ? ? ? Bundle bundle = new Bundle();
? ? ? ? ? ? ? ? ? ? ? ? bundle.putString("data",result);
? ? ? ? ? ? ? ? ? ? ? ? message.setData(bundle);//向主線程發(fā)信息
? ? ? ? ? ? ? ? ? ? ? ? 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, "調(diào)用成功"+result, Toast.LENGTH_SHORT).show();//測(cè)試彈框
? ? ? ? ? ? return true;
? ? ? ? }
? ? });
}4.spring boot后臺(tái)接受圖片并寫(xiě)入本地路徑
@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("上傳失敗,因?yàn)槲募强盏?");
? ? ? ? }
? ? }注:如果上傳圖片提示沒(méi)有權(quán)限,則長(zhǎng)按apk圖標(biāo),打開(kāi)讀取本地文件的權(quán)限即可
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android xmlns 的作用及其自定義實(shí)例詳解
這篇文章主要介紹了 Android xmlns 的作用及其自定義實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
如何為RecyclerView添加Header和Footer
這篇文章主要為大家詳細(xì)介紹了如何為RecyclerView添加Header和Footer,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例
這篇文章主要介紹了Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Android實(shí)現(xiàn)文件上傳和下載倒計(jì)時(shí)功能的圓形進(jìn)度條
這篇文章主要介紹了Android實(shí)現(xiàn)文件上傳和下載倒計(jì)時(shí)功能的圓形進(jìn)度條,需要的朋友可以參考下2017-09-09
Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法,涉及Android針對(duì)圖形文件的遠(yuǎn)程下載及遍歷顯示相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Android 開(kāi)發(fā)系統(tǒng)自帶語(yǔ)音模塊應(yīng)用
本篇文章 主要介紹 Android 開(kāi)發(fā)自帶語(yǔ)音模塊實(shí)例,在開(kāi)發(fā)Android系統(tǒng)中會(huì)用到系統(tǒng)語(yǔ)音搜索模塊,這里給大家一個(gè)參考實(shí)例2016-07-07
Android實(shí)現(xiàn)自定義View控件的流程詳解
這篇文章主要為大家詳細(xì)介紹了Android中實(shí)現(xiàn)自定義View控件的流程,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06
Android實(shí)現(xiàn)3D標(biāo)簽云效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)3D標(biāo)簽云效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧
這篇文章主要介紹了Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧 ,需要的朋友可以參考下2018-04-04
Android 開(kāi)機(jī)充電圖標(biāo)和充電動(dòng)畫(huà)效果
這篇文章主要介紹了Android 開(kāi)機(jī)充電圖標(biāo)和充電動(dòng)畫(huà)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12

