LightRoom Classic Lua插件上传文件触发fileSize空值报错如何解决?
解决方案
报错?:0: attempt to perform arithmetic on field 'fileSize' (a nil value)的核心原因是LrHttp.postMultipart接口在处理你传入的文件参数时,无法正常读取到目标文件的大小,在计算请求体长度的环节触发了空值运算错误,可按以下步骤修复:
- 修复Windows路径转义错误
Lua字符串中反斜杠\是转义字符,你当前写的路径没有转义,会导致实际读取的路径无效,文件无法被定位。修改路径写法,同时没必要给常量字符串套assert:
-- 反斜杠需要双写转义 local filePath = "C:\\Users\\Ankit\\Desktop\\Hangman.PNG"
- 提前校验文件有效性
调用上传接口前先判断文件是否存在,排除路径错误导致的读取失败,如果运行时提示LrFileUtils未定义,在代码头部加local LrFileUtils = import 'LrFileUtils'引入对应模块即可:
if not LrFileUtils.exists(filePath) then LrDialogs.message("文件错误", "目标文件不存在:" .. filePath) return end local fileName = LrPathUtils.leafName(filePath) -- 主动读取文件大小,避免SDK内部读取失败 local fileSize = LrFileUtils.fileSize(filePath)
- 补全mimeChunk的必填参数
部分版本的Lightroom SDK要求文件类型的mime块显式传入fileSize字段,调整你的mime块构造逻辑:
local mimeChunks = {} mimeChunks[#mimeChunks + 1] = { name = 'api_sig', value = "test value" } mimeChunks[#mimeChunks + 1] = { name = "file", filePath = filePath, fileName = fileName, contentType = "application/octet-stream", fileSize = fileSize -- 新增显式传入的文件大小字段 }
修改完成后再调用LrHttp.postMultipart即可正常触发请求。
内容的提问来源于stack exchange,提问作者ankitkanojia
相关产品推荐
相关产品推荐

