Bom dia!
fiz uma biblioteca pra passar o formulário "boundary" do método POST.
Como ele pode receber vários conteúdos ao mesmo tempo fiz um laço contando as posições.
O retorno pode ser uma tabela ou pegar diretamente um par: chave = valor
Se quiser pode incluir ela no html ou no cgi
funcao PasseFormularioWebKit(cadeia,chave)
cadeia = [[------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="ArquivoDeRetorno"; filename="4155_00154695_20180220_C240_00.ret"
Content-Type: application/octet-stream
rafael
------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo1"; filename="arquivo1.txt"
Content-Type: text/plain
Conteúdo do texto
------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo2"; filename="arquivo2.html"
Content-Type: text/html
<!DOCTYPE html><title>Conteúdo do html</title>
------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="conteudoJSON"
Content-Type: application/json
{"Objeto":"objetoJSON","chave":"Isso é uma tabela em prisma"}
------WebKitFormBoundaryDCkEyCJwVlL5BGuC--]]
pi = {};
pf = {};
x = 1;
pos_busca = 1; //ponto inicial da busca
se Metodo == 'GET' entao erro('____________________Metodo suportado somente: POST____________________') fim
enquanto 1 inicio //cria um laço infinito
linha = cadeia:separe('^(.-)[\r\n].*$') ou ''
se pos_busca ==1 e linha:procure('WebKitFormBoundary') entao
codigoinicial = linha
fim
se nao codigoinicial entao
quebre erro('____________________NÃO É WebKitFormBoundary____________________')
fim
pi[ x ] , pf [ x ] = string.procure ( cadeia , codigoinicial , pos_busca );
se pi[x] == nulo entao
//se o retorno de pi for nulo entao interrompe o laço
quebre
senao //senao salva uma nova posicao de busca
pos_busca = pf [ x ] + 1;
fim;
x = x + 1;
//fazendo o incremento de x
fim
Matriz = {}
para i = 1 , #pi-1 inicio
//imprima( 'Busca numero ' .. i .. ' : ' .. pi[ i ] .. ' - ' .. pf [ i ] );
conteudo = string.corte(cadeia,pf[i]+2,pi[i+1]-2)
linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
nome = conteudo:separe('name=["](.-)[";].*$') ou ''
nomedoarquivo = conteudo:separe('filename=["](.-)[";].*$') ou ''
disposicao = conteudo:separe('Content%-Disposition: (.-[^;\r?\n]+).*$') ou ''
conteudo = conteudo:corte(#linha+2,#conteudo)
linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
tipo_conteudo = conteudo:separe('Content%-Type: (.-[^;\r?\n]+).*$') ou ''
conteudo = conteudo:corte(#linha+2,#conteudo):apare()
linha = conteudo:separe('^(.-)[\r?\n?].*$')
se linha == ('') entao
conteudo = conteudo:corte(#linha+2,#conteudo):apare()
fim
Matriz[i] = {}
Matriz[i]['Nome'] = nome
Matriz[i]['NomeDoArquivo'] = nomedoarquivo
Matriz[i]['Disposicao'] = disposicao
Matriz[i]['TipoDeConteudo'] = tipo_conteudo
Matriz[i]['Conteudo'] = conteudo
fim
se chave entao
local valor = nulo
para i,v em pares(Matriz) inicio
se nao valor entao
valor = v.Nome == chave
se valor entao valor = v.Conteudo fim
fim
fim
retorne valor
senao
retorne Matriz
fim
fim
ArquivoDeRetorno = PasseFormularioWebKit(Formularios,'ArquivoDeRetorno')
conteudoJSON = PasseFormularioWebKit(Formularios,'conteudoJSON')
arquivo1 = PasseFormularioWebKit(Formularios,'arquivo1')
imprima(ArquivoDeRetorno)
imprima(conteudoJSON)
imprima(arquivo1)
Isso aí, Rafael, excelente!