继上篇成功的与服务器端通信上之后,我现在需要将安卓本地的图片上传到服务端。服务端接收图片存下来。

参考: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服务器端通信之上传图片的更多相关文章

  1. Android客户端与Python服务器端的简单通信

    最近在做一个APP,需要与服务器通信,一点一点的尝试,记录一下. 本文使用了OkHttp和Flask框架. 参考博文:https://ai-exception.com/2018/06/13/%E4%B ...

  2. Android客户端与Eclipse服务器端的Socket通信

    Server端代码 用来实现客户端socket的监听 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...

  3. android 客户端支付宝 php服务器端编写

    生成私钥 输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前 bin 文件目 录中会新增一个 rsa_private_key.pem 文件,其文件为原 ...

  4. Android客户端和服务器端数据交互

    网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代 ...

  5. SSH服务器与Android通信(2)--Android客户端接收数据

    基本原理是Android客户端通过HttpClient向服务器发出请求,服务器向Android客户端返回JSON字符串,Android客户端解析JSON字符串获得数据. 1. 新建一个Android项 ...

  6. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

  7. (转)android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下       首先客户端从服务器端获取json数据 1.利用HttpUrlConnection   复制代码 ...

  8. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

  9. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

随机推荐

  1. Java——类的继承、访问控制

    [继承] <1>Java只支持单继承,不支持多继承. <2>继承父类的私有成员变量,只有所有权,没有使用权.   [继承中的构造方法]

  2. 前端HTTP缓存

    Web 缓存大致可以分为:数据库缓存.服务器端缓存(代理服务器缓存.CDN 缓存).浏览器缓存.其中前端比较关心的是浏览器缓存,包括今天要说的HTTP缓存和前面说过的cookie.localStora ...

  3. vue使用过滤器 filters:{}

    在项目开发过程中,经常会用到过滤器,下面就来说说我用的用法 我从后台获取到一个时间字段,是2017-03-23的格式,但是我要的是年月日分开显示,那就要用到过滤器了 在没有用过滤器的时候,是这样的: ...

  4. AC自动机再加强版

    AC自动机 拓扑排序优化,注意拓扑排序前要把所有入度为零的点都加进去 #include<bits/stdc++.h> using namespace std; #define maxn 1 ...

  5. WEB Fuzz中需要关注的7种响应

    WEB应用模糊测试(WEB Fuzz)是一种特殊形式的网络协议模糊测试,专门关注遵循HTTP规范的网络数据包. WEB Fuzz并不是新的概念,目前有多种WEB应用模糊测试器(WEB Fuzzer), ...

  6. Linux root用户与普通用户时间不一致

    造成这种原因有多种,可能是安装软件时选的时区不是本国时间等等. 今天检查了root用户和oracle及grid用户的时间不一样,幸好数据库还没有正式应用,不然可能会造成时间差影响. 现在将同步的方法步 ...

  7. POJ 1380 Equipment Box (暴力枚举)

    Equipment Box 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/B Description There is a la ...

  8. vue 通过绑定事件获取当前行的id

    <div @click="router(items.productId)" style="float: left;" :key='items.produc ...

  9. Oracle10g 64位 在Windows 2008 Server R2 中的安装 DBconsole无法启动

    致谢!本文参考http://www.cnblogs.com/leiOOlei/archive/2013/08/19/3268239.html 背景: 操作系统Windows 2008 Server R ...

  10. EDM营销必知:电子邮件打开和点击的几组数据

    在EDM营销中,了解一下电子邮件何时被打开和点击很重要.这有助于我们在合适的时间发送邮件出去,从而带来最大化的效果. 1.邮件打开的最高峰在早上8点至9点之间,其次是下午三点到四点.因此,在这个时间发 ...