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

参考: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.

最新文章

  1. jQuery种种
  2. java 线程协作 join()
  3. js获取鼠标位置的各种方法
  4. java中文乱码解决方法汇总
  5. a标签 打电话 发邮件
  6. hdu---(1421)搬寝室(dp)
  7. Vue.js相关知识4-路由
  8. JS--事件对象中部份浏览器不兼容方法
  9. linux 屏幕录像(recordmydesktop)
  10. iOS 多线程讲解2
  11. 开发者:网站 &amp; SDK
  12. Kafka 存储机制和副本
  13. Java的DAO设计模式
  14. Python之排序算法:快速排序与冒泡排序
  15. BZOJ 3544: [ONTAK2010]Creative Accounting [set]
  16. 【Python】 上下文管理器和contextlib
  17. 对Java的初步的认识:
  18. Kafka Producer源码简述
  19. DateTime时间格式转换为Unix时间戳格式
  20. mysql and不能同时运用在一个字段上

热门文章

  1. LeetCode--102--二叉树的层次遍历(python)
  2. 一天久坐办公室,怎么减fei?!
  3. for-in语句和with语句、break和continue语句
  4. JSP上传一个文件夹
  5. Android ListView焦点事件冲突问题与解决
  6. 通过运行窗口输入命令方式,打开Internet窗口
  7. UE4 质心相关
  8. E. Natasha, Sasha and the Prefix Sums
  9. Java称霸编程语言排行榜
  10. 使用清华大学提供的 Anaconda 镜像下载 Python 软件包