Android客戶端與Python服務器端通訊之上傳圖片

繼上篇成功的與服務器端通訊上以後,我如今須要將安卓本地的圖片上傳到服務端。服務端接收圖片存下來。java

參考:https://blog.csdn.net/qq_26906345/article/details/91045074android

Android客戶端:flask

點擊按鈕會將文件上傳到服務器,圖片的地址我暫時是寫死的。服務器

 

 

 服務器端:app

接收到圖片存儲到寫好的位置ide

相關代碼以下:佈局

Android客戶端:因爲佈局文件只有一個按鈕,故不在此展出。post

MainActivity.java:主要就是設置了對按鈕的監聽。gradle

package com.example.vesper.uploadpic; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.io.File; public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File f=new File(Environment.getExternalStorageDirectory().getPath()+"/mahc/image/1573125250817.jpg"); try { ImageUpload.run(f); } catch (Exception e) { e.printStackTrace(); } } }); } }
View Code

ImageUpload.java:開啓線程上傳圖片。ui

 1 package com.example.vesper.uploadpic;  2 
 3 import java.io.File;  4 import java.io.IOException;  5 
 6 import okhttp3.MediaType;  7 import okhttp3.MultipartBody;  8 import okhttp3.OkHttpClient;  9 import okhttp3.Request; 10 import okhttp3.RequestBody; 11 import okhttp3.Response; 12 
13 public class ImageUpload{ 14 
15     private static final MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg"); 16     private static final OkHttpClient client = new OkHttpClient(); 17     public static void run(File f) throws Exception { 18         final File file=f; 19         new Thread() { 20  @Override 21             public void run() { 22                 //子線程須要作的工做
23                 RequestBody requestBody = new MultipartBody.Builder() 24  .setType(MultipartBody.FORM) 25                         .addFormDataPart("file","1.jpg", 26  RequestBody.create(MEDIA_TYPE_JPG, file)) 27  .build(); 28                 //設置爲本身的ip地址
29                 Request request = new Request.Builder() 30                         .url("http://192.168.xxx.xxx:5000/upload") 31  .post(requestBody) 32  .build(); 33                 try(Response response = client.newCall(request).execute()){ 34                     if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 35 
36  System.out.println(response.body().string()); 37                 } catch (IOException e) { 38  e.printStackTrace(); 39  } 40  } 41  }.start(); 42  } 43 }
View Code

Python服務器端:

uploadserver.py

 1 #-*-coding:utf-8-*-
 2 from flask import Flask  3 from flask import request  4 import cv2  5 import os  6 from werkzeug.utils import secure_filename  7 app = Flask(__name__)  8 basedir=os.path.abspath(os.path.dirname(__file__))  9 
10 @app.route('/') 11 def test(): 12     return '服務器正常運行'
13 
14 #此方法接收圖片
15 @app.route('/upload',methods=['POST']) 16 def upload(): 17     f = request.files['file'] 18     print('鏈接成功') 19    # 當前文件所在路徑
20     basepath = os.path.dirname(__file__) 21     upload_path = os.path.join(basepath, '1115', secure_filename(f.filename)) 22     # 保存文件
23  f.save(upload_path) 24     return '保存成功'
25 
26 if __name__ == '__main__': 27     app.run(host='0.0.0.0')
View Code

遇到的問題:

1.讀文件權限要在Manifest.xml中加上:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2.在gradle中修改最小SDK爲19.

相關文章
相關標籤/搜索