Flask--学习笔记-与Android的交互
来源:互联网 发布:jquery 1.7.1.min.js 编辑:程序博客网 时间:2024/06/10 14:05
- 服务器后台添加一个API接口用于接收Android端数据,具体写法跟从WEB端接收表单字段相同
- Android端模拟Form表单向上边的接口POST数据
Android端的核心代码
private void uploadFileAndString(String actionUrl, String newName, File uploadFile) { String end = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; try { URL url = new URL(actionUrl); HttpURLConnection con = (HttpURLConnection) url.openConnection(); /* 允许Input、Output,不使用Cache */ con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); /* 设置传送的method=POST */ con.setRequestMethod("POST"); /* setRequestProperty */ con.setRequestProperty("Connection", "Keep-Alive"); con.setRequestProperty("Charset", "UTF-8"); con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); /* 设置DataOutputStream */ DataOutputStream ds = new DataOutputStream(con.getOutputStream()); ds.writeBytes(twoHyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data; " + "name=\"userfile\";filename=\"" + newName + "\"" + end); ds.writeBytes(end); /* 取得文件的FileInputStream */ FileInputStream fStream = new FileInputStream(uploadFile); /* 设置每次写入1024bytes */ int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int length = -1; /* 从文件读取数据至缓冲区 */ while ((length = fStream.read(buffer)) != -1) { /* 将资料写入DataOutputStream中 */ ds.write(buffer, 0, length); } ds.writeBytes(end); // ----- ds.writeBytes(twoHyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data;name=\"name\"" + end); ds.writeBytes(end + URLEncoder.encode("xiexiezhichi", "UTF-8") + end); // ----- ds.writeBytes(twoHyphens + boundary + twoHyphens + end); /* close streams */ fStream.close(); ds.flush(); /* 取得Response内容 */ InputStream is = con.getInputStream(); int ch; StringBuffer b = new StringBuffer(); while ((ch = is.read()) != -1) { b.append((char) ch); } handler.sendEmptyMessage(0x12); /* 关闭DataOutputStream */ ds.close(); } catch (Exception e) { handler.sendEmptyMessage(0x13); }}@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { uploadFileAndString("http://192.168.1.130:5000/file", "a.jpg", new File(Environment .getExternalStorageDirectory() .getAbsolutePath() + "/a.png")); } }).start(); } });}
Flask服务器端代码
@app.route('/file', methods=['POST', 'GET'])def update_file(): """ Api for getting file & string data from MApp Store data to local files """ if request.method == 'POST': # Get file object from field of file f = request.files['userfile'] f.save(os.path.join('/home/ping/Documents', f.filename)) # Get str object from field of text s = request.form['name'] with open('/home/ping/Documents/test.txt', 'a') as f: f.write(s) return 'Done!'
0 0
- Flask--学习笔记-与Android的交互
- Android学习笔记-Android与HTML+JS交互
- [Android]WebView与Js交互的学习
- android学习笔记(3)与SSH后台交互
- 【android学习笔记】与MYSQL交互之JSONARRAY
- 安卓学习笔记---解决Android签名混淆后WebView与JS交互失效的问题
- windows10+Python3.6的flask学习笔记
- Flask和Ajax的交互
- 结合项目的Flask学习与分享
- Flask-SQLALchemy学习笔记
- Flask学习笔记-1
- Flask源码学习笔记
- flask学习笔记
- flask学习笔记(-模板)
- flask学习笔记(-数据库)
- flask学习笔记
- Flask--学习笔记-注册
- Flask学习笔记
- 1037. 在霍格沃茨找零钱(20)-PAT乙级
- 13.自定义类STOCK
- shadowsocks最新官网地址
- 14.后缀const
- PostgreSQL多种恢复实例分析
- Flask--学习笔记-与Android的交互
- 读书笔记:C++四种次语言概念
- 15.自定义类VECTOR与操作符重载
- 基于动态规划解决回文问题
- vuejs 数据渲染成功仍然报错的一个问题
- 神经网络教程(一)引入
- JavaScript检查一个字符串(str)是否以指定的字符串(target)结尾/开始
- 16.复制构造函数
- HTTP协议详解(真的很经典)