Below is my code that calls the multi-part form… It’s pretty vanilla now. My old print statements are still in there commented out, used for debugging the android side…
function uploadFile(fileName, callBack) -- uploads a file, calls the callback when the upload is verified as complete
-- if( isAndroid == true ) then
-- uploadFile2(fileName, callBack) -- Non-async, android version
-- return
-- end
-- iOS version
local MultipartFormData = require("class\_MultipartFormData")
local multipart = MultipartFormData.new()
-- print(" -- uploading... iOS network.request() method - filename: ", fileName)
multipart:addFile("photo", system.pathForFile( fileName, system.TemporaryDirectory ), "image/jpeg", fileName)
uploadCallBack = callBack -- routine to call back to inform the upload is complete
-- print(" -- multipart:tostring -- ", multipart:toString())
uploadParams = {}
uploadParams.body = multipart:getBody() -- Must call getBody() first!
uploadParams.headers = multipart:getHeaders() -- Headers not valid until getBody() is called.
-- local tempString = string.sub(mojoData.cookieParams, 12, -1) -- Skip the starting &PHPSESSID= part....
-- uploadParams.headers["Cookie"] = {}
-- uploadParams.headers["Cookie"] = tempString
-- printTable(uploadParams.headers, "Headers", 2)
local cryptoKey= "XXXXXX" -- Crypto stuff redacted
local cryptoLogin = "XXXXX"
local cryptoPass = "XXXXX
-- print(" -- CRYPTO LOGIN: ", cryptoLogin )
local uploadURL = mojoData.mediaServerURL
-- New mediaServer params
uploadURL = uploadURL -- login params redacted...
-- print(" -- Sending upload request -- ", uploadURL)
network.request( uploadURL, "POST", upLoadListener, uploadParams)
-- print(" -- uploader Done.")
end
For a while, when it wouldn’t work on android, I used the following to at least have android uploads functional while I got it going (http request worked on android for me, but not network.request for upload):
[code]
function uploadFile2(fileName, callBack) – uploads a file ANDROID ONLY, calls the callback when the upload is verified as complete
http = require(“socket.http”)
ltn12 = require(“ltn12”)
url = require(“socket.url”)
local post
local response = {}
– ANDROID ONLY upload…
local MultipartFormData = require(“class_MultipartFormData”)
local multipart = MultipartFormData.new()
print(" – uploading… ANDROID http request method – ")
multipart:addFile(“photo”, system.pathForFile( fileName, system.TemporaryDirectory ), “image/jpeg”, fileName)
uploadParams = {}
– print(" point a")
uploadParams.body = multipart:getBody() – Must call getBody() first!
– print(" point b")
uploadParams.headers = multipart:getHeaders() – Headers not valid until getBody() is called.
uploadCallBack = callBack – routine to call back to inform the upload is complete
local uploadURL = mojoData.mediaServerURL
– New mediaServer params
uploadURL = uploadURL ----- login info params redacted…
local r, c, h = http.request {
url = uploadURL,
method = “POST”,
headers =
uploadParams.headers,
source = ltn12.source.string(uploadParams.body),
sink = ltn12.sink.table(response)
}
– print(response[1])
local event = {}
event.response = response[1]
upLoadListener( event ) – This is synchronous, so call the listener back with response…
end
[/code] [import]uid: 79933 topic_id: 26120 reply_id: 134186[/import]