B4A应用实现设备文件上传至本地主机技术求助
B4A本地主机文件上传实现方案
一、本地主机接收服务搭建
先在本地主机上搭建简单的文件接收服务,以Python Flask为例,代码如下:
from flask import Flask, request import os app = Flask(__name__) UPLOAD_FOLDER = './uploads' os.makedirs(UPLOAD_FOLDER, exist_ok=True) @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return 'No file part' file = request.files['file'] if file.filename == '': return 'No selected file' if file: file.save(os.path.join(UPLOAD_FOLDER, file.filename)) return 'File uploaded successfully' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
运行脚本后,服务会监听本地所有IP的5000端口,用于接收上传文件。
二、B4A端上传代码实现
- 确保项目已添加
OkHttpUtils2和RuntimePermissions库 - 核心代码示例:
Sub Process_Globals Private job As HttpJob End Sub Sub Activity_Create(FirstTime As Boolean) If FirstTime Then job.Initialize("UploadJob", Me) End If ' 请求文件读取权限 RuntimePermissions.CheckAndRequest(RuntimePermissions.PERMISSION_READ_EXTERNAL_STORAGE) End Sub Sub Activity_PermissionResult (Permission As String, Result As Boolean) If Result Then ' 替换为你要上传的文件实际路径,比如/storage/emulated/0/test.txt Dim filePath As String = "/storage/emulated/0/test.txt" UploadFile(filePath) End If End Sub Sub UploadFile(FilePath As String) Dim boundary As String = "---------------------------1234567890" Dim stream As MultipartFileWriter stream.Initialize(boundary) stream.AddFile("file", File.GetName(FilePath), "application/octet-stream", File.ReadBytes(FilePath)) ' 替换为本地主机的局域网IP,比如192.168.1.100:5000/upload Dim url As String = "http://192.168.1.100:5000/upload" job.PostMultipart(url, stream.GetHeaders, stream.Content) End Sub Sub JobDone (Job As HttpJob) If Job.Success Then Log("上传结果: " & Job.GetString) ToastMessageShow("文件上传成功", True) Else Log("上传失败: " & Job.ErrorMessage) ToastMessageShow("上传失败", True) End If Job.Release End Sub
三、关键注意事项
- 确保B4A设备和本地主机处于同一局域网
- 本地主机防火墙需开放对应端口(示例中为5000)
- 禁止使用
localhost作为主机地址,必须用主机的局域网IP(可通过ipconfig/ifconfig查询) - 安卓10及以上版本需适配文件访问权限,若使用外部存储,可能需要结合
FileProvider或Scoped Storage机制
内容的提问来源于stack exchange,提问作者Muneeb
相关产品推荐
相关产品推荐

