Android客户端与Python服务器端通信之上传图片
继上篇成功的与服务器端通信上之后,我现在需要将安卓本地的图片上传到服务端。服务端接收图片存下来。
参考:https://blog.csdn.net/qq_26906345/article/details/91045074
Android客户端:
点击按钮会将文件上传到服务器,图片的地址我暂时是写死的。

服务器端:
接收到图片存储到写好的位置

相关代码如下:
Android客户端:由于布局文件只有一个按钮,故不在此展出。
MainActivity.java:主要就是设置了对按钮的监听。
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();
}
}
}); }
}
ImageUpload.java:开启线程上传图片。
package com.example.vesper.uploadpic; 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 ImageUpload{ private static final MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg");
private static final OkHttpClient client = new OkHttpClient();
public static void run(File f) throws Exception {
final File file=f;
new Thread() {
@Override
public void run() {
//子线程需要做的工作
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file","1.jpg",
RequestBody.create(MEDIA_TYPE_JPG, file))
.build();
//设置为自己的ip地址
Request request = new Request.Builder()
.url("http://192.168.xxx.xxx:5000/upload")
.post(requestBody)
.build();
try(Response response = client.newCall(request).execute()){
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
Python服务器端:
uploadserver.py:
#-*-coding:utf-8-*-
from flask import Flask
from flask import request
import cv2
import os
from werkzeug.utils import secure_filename
app = Flask(__name__)
basedir=os.path.abspath(os.path.dirname(__file__)) @app.route('/')
def test():
return '服务器正常运行' #此方法接收图片
@app.route('/upload',methods=['POST'])
def upload():
f = request.files['file']
print('连接成功')
# 当前文件所在路径
basepath = os.path.dirname(__file__)
upload_path = os.path.join(basepath, '', secure_filename(f.filename))
# 保存文件
f.save(upload_path)
return '保存成功' if __name__ == '__main__':
app.run(host='0.0.0.0')
遇到的问题:
1.读文件权限要在Manifest.xml中加上:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2.在gradle中修改最小SDK为19.
Android客户端与Python服务器端通信之上传图片的更多相关文章
- Android客户端与Python服务器端的简单通信
最近在做一个APP,需要与服务器通信,一点一点的尝试,记录一下. 本文使用了OkHttp和Flask框架. 参考博文:https://ai-exception.com/2018/06/13/%E4%B ...
- Android客户端与Eclipse服务器端的Socket通信
Server端代码 用来实现客户端socket的监听 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...
- android 客户端支付宝 php服务器端编写
生成私钥 输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前 bin 文件目 录中会新增一个 rsa_private_key.pem 文件,其文件为原 ...
- Android客户端和服务器端数据交互
网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代 ...
- SSH服务器与Android通信(2)--Android客户端接收数据
基本原理是Android客户端通过HttpClient向服务器发出请求,服务器向Android客户端返回JSON字符串,Android客户端解析JSON字符串获得数据. 1. 新建一个Android项 ...
- android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
- (转)android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 ...
- socket 通信 入门3 android 客户端 C# 服务端
这是一个android端操控服务器的例子 就是发送简单指令到服务器 然后服务器响应什么的... 当然这里是未完成的 只是简单展示一下大致思路 首先连接建立起来后 服务端给客户端一条信息 告诉 ...
- Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信
Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...
随机推荐
- BFC、IFC、GFC和FFC
基本概念 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个Box 组成的.元素的类型和 display 属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不 ...
- django FBV +CBV 视图处理方式总结
1.FBV(function base views) 在视图里使用函数处理请求. url: re_path('fbv', views.fbv), # url(r'^fbv' ...
- 笔记本连接树莓派3b(不需要屏幕)
一.网线直连 工具:笔记本,网线,树莓派 软件:putty 过程: 将系统烧录进SD卡后,在root里添加一个名字为“ssh”的空白文件(不需后缀名)来开启ssh服务,SD卡里的cmdline.txt ...
- 大数据笔记(五)——HDFS的高级特性
一.HDFS的回收站: recyclebin 1.HDFS的回收站默认是关闭的 2.启用回收站:去core-site.xml配置 路径:/root/training/hadoop-2.7.3/etc/ ...
- sqlserver 获取存储过程执行时间
use [数据库名] select last_execution_time '最近一次执行时间' from sys.dm_exec_procedure_stats where type='P' ...
- 顶级域名、一级域名、二级域名与IP
转自:https://blog.csdn.net/qq_38071429/article/details/80339091 域名:可分三级,一级域名,二级域名,三级域名.是由一串字符+域名后缀组成,我 ...
- vue+ts修改父组件属性的写法。
部分代码如下: 父组件: <coupon :modifyFlag.sync="flag" /> data() { return { fl ...
- SQL数据库字段添加说明文字
1.查看指定表中的所有带说明文字的字段内容 SELECT *,OBJECT_NAME(major_id) AS obj_name FROM sys.extended_properties WHERE ...
- Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
一个小小的 TLang 类, 实现多语言切换, 挺好的. 它的工作思路是: 1.首先通过 AddLang('语言代码') 添加语言类别, 如: AddLang('en').AddLang('cn'). ...
- Delphi中堆栈区别
http://blog.csdn.net/zang141588761/article/details/52838728 Delphi中堆栈区别 2016-10-17 14:49 277人阅读 评论( ...