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)接受圖片并寫入本地路徑
@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)槲募强盏?");
? ? ? ? }
? ? }注:如果上傳圖片提示沒有權(quán)限,則長(zhǎng)按apk圖標(biāo),打開讀取本地文件的權(quán)限即可
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開發(fā)中ViewPager實(shí)現(xiàn)多頁(yè)面切換效果
ViewPager用于實(shí)現(xiàn)多頁(yè)面的切換效果,該類存在于Google的兼容包里面,所以在引用時(shí)記得在BuilldPath中加入“Android-support-v4.jar”。具體詳情大家可以參考下本文2016-11-11
基于barcodescanner實(shí)現(xiàn)Android二維碼掃描功能
這篇文章主要為大家詳細(xì)介紹了基于barcodescanner實(shí)現(xiàn)Android二維碼掃描功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
利用Android實(shí)現(xiàn)光影流動(dòng)特效的方法詳解
Flutter 的畫筆類 Paint 提供了很多圖形繪制的配置屬性,來供我們繪制更豐富多彩的圖形。本篇我們引入一個(gè) Paint 類新的屬性:maskFilter,再結(jié)合之前的 shader 和動(dòng)畫,制作出光影流動(dòng)特效,感興趣的可以嘗試一下2022-07-07
android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果
這篇文章主要介紹了android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果,需要的朋友可以參考下2017-06-06
Android實(shí)現(xiàn)EditText圖文混合插入上傳功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)EditText圖文混合插入上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Android實(shí)現(xiàn)View滑動(dòng)的幾種方式
Android中的View類是所有UI控件的基類(Base class),也就是說我們平時(shí)所有到的各種UI控件,比如Button、ImagView等等都繼承自View類。這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)View滑動(dòng)的幾種方式,需要的朋友可以參考下2016-04-04
Android開發(fā)之針對(duì)聯(lián)系人的封裝
本文給大家分享的是如何在Android開發(fā)中封裝聯(lián)系人模塊以及封裝后的使用及總結(jié),最后奉上代碼,有需要的小伙伴可以參考下。2016-02-02
android時(shí)間選擇控件之TimePickerView使用方法詳解
這篇文章主要為大家詳細(xì)介紹了android時(shí)間選擇控件之TimePickerView的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
Android應(yīng)用開發(fā)中Fragment存儲(chǔ)功能的基本用法
這篇文章主要介紹了Android應(yīng)用開發(fā)中使用Fragment存儲(chǔ)功能的基本用法,包括對(duì)Fragment的非中斷保存setRetaineInstance的講解,需要的朋友可以參考下2016-02-02

