You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端上传代码实现

  1. 确保项目已添加OkHttpUtils2和RuntimePermissions库
  2. 核心代码示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:45:36