ankitkanojia
ankitkanojia

Reputation: 3122

?:0: attempt to perform arithmetic on field 'fileSize' (a nil value)

How to resolved error or possible ways to resolved it?

Guys, i've developed plugin using Lua language which can be integrate or run from Adobe's LightRoom Classic. Currently i need to upload or send a file to server but i can not. Everytime i called the POST API which is multipart/form-data error popup "?:0: attempt to perform arithmetic on field 'fileSize' (a nil value)". Not even API is being called this error pops up before API call. after debug I can assure the possible issue is in creating mimeChunks with file type.

I have developed the code like below, can any one help me out with suggestions so that i can able to resolved issue?

local filePath = assert("C:\Users\Ankit\Desktop\Hangman.PNG")
local fileName = LrPathUtils.leafName(filePath)

local mimeChunks = {}
mimeChunks[#mimeChunks + 1] = {
  name = 'api_sig',
  value = "test value"
}
mimeChunks[#mimeChunks + 1] = {
  name = "file",
  filePath = filePath,
  fileName = fileName,
  contentType = "application/octet-stream"
}

local postUrl = "API endpoint"
local result, hdrs = LrHttp.postMultipart(postUrl, mimeChunks)
if result then
  LrDialogs.message("Form Values", result)
else
  LrDialogs.message("Form Values", "API issue")
end

Upvotes: 0

Views: 346

Answers (1)

ankitkanojia
ankitkanojia

Reputation: 3122

Eventually image or file path itself cause the issue, there are no such indications or articles related to this functionality, but yes "add-on backslash" will work out for sure. Kindly review the below code for more detailed bifurcation which pass dynamic selected file or image path.

local function uploadFile(filePath)
    local fileName = LrPathUtils.leafName( filePath )
    local mimeChunks = {}
    mimeChunks[ #mimeChunks + 1 ] = { name = 'api_sig', value = "test value"}
    mimeChunks[#mimeChunks + 1] = {
        name = "file",
        filePath = filePath,
        fileName = fileName,
        contentType = "image/jpeg"  --multipart/form-data  --application/octet-stream
    }
    import "LrTasks".startAsyncTask( 
        function()
            local postUrl = "http://cms.local.com/api/v1/upload"
            local result, hdrs = LrHttp.postMultipart(postUrl, mimeChunks)
            if result then
                LrDialogs.message("Image uploaded.", result)
            else
                LrDialogs.message("Error", "API issue")
            end
        end
    )
end

Above uploadFile method will automatically call the API and post form-data collection. Below code is for call uploadFile function which select all the images from catalog.

for p, photo in ipairs(LrApplication.activeCatalog()) do
    uploadFile(assert(photo:getRawMetadata('path')));
end

Above code will help you out the selection of categlog with Adobe's LightRoom Plugin.

Upvotes: 0

Related Questions