AutoJs6-Documentation icon indicating copy to clipboard operation
AutoJs6-Documentation copied to clipboard

无法上传图片至api识别

Open taozi0001 opened this issue 2 years ago • 0 comments

// 截取zs至yx范围内的图片。 if (title && ekp) { var height = yx.y - zs.y; // 计算截图高度 var width = yx.x - zs.x; // 计算截图宽度 var screenshot = images.captureScreen(); var croppedImage = images.clip(screenshot, zs.x, zs.y, width, height); // 截取zs至yx范围内的图片 log("截取图片成功");

// 文件保存到:sdcard/脚本/安卓自动化/linshijietu文件夹内
var dirPath = "/sdcard/脚本/安卓自动化/linshijietu"; // 定义目录路径
files.ensureDir(dirPath); // 确保目录存在
log(`目录路径为:${dirPath}`);

// 定义图片地址,检查文件扩展名是否为'jpg'
var fileName = "croppedImage.jpg"; // 定义文件名
var fileExt = files.getExtension(fileName); // 获取文件扩展名
if (fileExt != "jpg") { // 判断文件扩展名是否为'jpg'
  log("文件扩展名不是'jpg',修改为'jpg'");
  fileName = files.getNameWithoutExtension(fileName) + ".jpg"; // 修改文件扩展名为'jpg'
}
log(`文件名为:${fileName}`);

// 构建文件路径:将目录路径和文件名拼接成完整的文件路径
var filePath = files.path(files.join(dirPath, fileName)); // 拼接并返回文件路径
log(`文件路径为:${filePath}`);

// 保存图片到文件路径
images.save(croppedImage, filePath, "jpg"); // 保存图片到文件路径
log("保存图片成功");

title = null; // 删除标题控件参数
ekp = null; // 删除ekp控件参数
titleBounds = null; // 删除标题控件bounds元素
ekpBounds = null; // 删除ekp控件bounds元素
titleCoords = null; // 删除标题控件座标点的参数
ekpCoords = null; // 删除ekp控件座标点的参数
zs = null; // 删除zs坐标点
yx = null; // 删除yx坐标点
height = null; // 删除截图高度
width = null; // 删除截图宽度

} else { log("无法截取图片"); } // 连接至ocr端口:http://173.249.197.34:12345/savelmage",将该截图文件上传至该api接口后删除该截图的本地存储并释放内存。 if (croppedImage) {

var ocrUrl = "http://173.249.197.34:5000/image"; // 定义ocr接口地址

 try { // 使用try...catch语句来处理可能出现的异常

// 使用files.open()方法打开图片文件,并指定读取模式为'r' var fileObj = files.open(filePath, 'r'); if (fileObj) { log("打开文件成功"); log(fileObj); // 打印文件对象的内容

    // 构建文件参数:创建一个包含文件参数的字典files,其中'file'是键,文件名、文件对象和文件类型('image/jpg')组成的元组是值。
    var fileParams = {file: [fileName, fileObj, "image/jpg"]}; // 创建文件参数字典
    log("构建文件参数成功");
    
    // 发送POST请求,将文件参数作为files参数传递给函数
    var response = http.postMultipart(ocrUrl, {}, fileParams);  // 发送POST请求
    log("发送POST请求成功");
    
    // 删除本地文件并释放内存
    files.remove(filePath); // 删除本地文件
    croppedImage.recycle(); // 释放图片内存
    screenshot.recycle(); // 释放截屏内存
    fileObj.close(); // 关闭文件对象
    log("删除本地文件并释放内存成功");
    
    // 获取返回的字符串
    var bodyString = response.body.string();
    log(`返回的字符串为:${bodyString}`);
    
    // 判断返回的字符串是否是json格式
    var isJson = true;
    try {
      JSON.parse(bodyString);
    } catch (e) {
      isJson = false;
    }
    
    if (isJson) {
      // 解析返回的json数据
      var json = response.body.json();
      if (json) {
        if (json.result == 0) { // 判断result是否为0
          log("返回参数result为0,跳转执行步骤7");
          step7(); // 执行步骤7
        } else if (json.result == 1) { // 判断result是否为1
          log("返回参数result为1,将附加文本赋值给变量");
          var text = json.identify_lines; // 将附加文本赋值给变量
          step11(text); // 执行下一步,并传入附加文本
        } else {
          log("返回参数无效");
        }
      } else {
        log("返回数据不是json格式");
      }
    } else {
      log("返回数据不是json格式");
    }
  } else {
    log("无法打开文件");
  }
  
} catch (e) { // 捕获异常并打印错误信息
  log(e.message);
}

} else { log("无法上传图片"); } }

以上代码运行报错,无法修复,请给予技术支持,非常感谢。报错如下: 15:33:33.969/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 保存图片成功

15:33:33.971/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 打开文件成功

15:33:33.972/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] org.autojs.autojs.pio.PReadableTextFile@e29793f

15:33:33.973/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 构建文件参数成功

15:33:33.975/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] java.lang.IllegalStateException: Multipart body must have at least one part.

15:33:33.977/V: [$remote/3.js] 运行结束 (用时 12.177 秒)

taozi0001 avatar Jul 15 '23 07:07 taozi0001