PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → upload image with HTTPRequest
upload image with HTTPRequest
Débuté par E. Meijer, 05 nov. 2013 13:14 - 8 réponses
Posté le 05 novembre 2013 - 13:14
Hi,

I want to upload an image taken with the Android tablet to a php server. I managed to get it working on the Windev Simulator, but on the Android tablet it does not work. It seems that the server receives a file with zero length. This is my code:

DataToSend is Buffer
iFileID = fOpen(sFilePath, foReadWrite)
IF iFileID <> -1 THEN
iSize = fSize(iFileID)
DataToSend = fRead(iFileID, iSize)
END
fClose(iFileID)

sContentType = "application/octet-stream"
IF HTTPRequest(gsRequestUrl + URLEncode(sRequest), gsUserAgent, "", DataToSend, sContentType) THEN
sResponse = HTTPGetResult()
ELSE
sResponse = ""
sHTTPError = HTTPGetResult(httpHeader)
END


Thanks in advance for the help.

Kind regards,
Edwin Meijer
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:13
PROCEDURE CAM_ImagemToArrayBytes(LOCAL PathImagem, LOCAL Tipo)

//Converter a imagem de um local do disco em Array de Bytes e gravar via webservice
///////////////////////////////////////////////////////////////////////////////////

ImagemArrayBytes is Buffer = ""

IF Tipo = "" OR Tipo = 0 THEN
ImagemArrayBytes = fLoadBuffer(PathImagem)
ELSE IF Tipo = 1
ImagemArrayBytes = fLoadBuffer(T020Arquivo.PathUrl020)
//Compactacao//
ImagemArrayBytes = Crypt(ImagemArrayBytes,"",cryptNone)
//ImagemArrayBytes = URLEncode(ImagemArrayBytes)
END

RESULT(ImagemArrayBytes)
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:13
PROCEDURE CAM_ImagemToArrayBytes(LOCAL PathImagem, LOCAL Tipo)

//Converter a imagem de um local do disco em Array de Bytes e gravar via webservice
///////////////////////////////////////////////////////////////////////////////////

ImagemArrayBytes is Buffer = ""

IF Tipo = "" OR Tipo = 0 THEN
ImagemArrayBytes = fLoadBuffer(PathImagem)
ELSE IF Tipo = 1
ImagemArrayBytes = fLoadBuffer(T020Arquivo.PathUrl020)
//Compactacao//
ImagemArrayBytes = Crypt(ImagemArrayBytes,"",cryptNone)
//ImagemArrayBytes = URLEncode(ImagemArrayBytes)
END

RESULT(ImagemArrayBytes)
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:14
PROCEDURE CAM_Enviar2WS(LOCAL ArquivoLocal,...
LOCAL Extensao,...
LOCAL Ambiente,...
LOCAL Crypto,...
LOCAL OpcaoEscolha,...
LOCAL CodigoArquivo,...
LOCAL CodOs,...
LOCAL CodOsItem,...
LOCAL NomeArquivo,...
LOCAL Descricao,...
LOCAL VideoFoto,...
LOCAL TempoSegundos,...
LOCAL FPS,...
LOCAL DebugSN)

//info("CAM_Enviar2WS")
IF gsDebugSN = "S"
DebugSN="S"
END

//Nao usados
ArquivoLocal = ArquivoLocal
Extensao = Extensao
Ambiente = Ambiente
OpcaoEscolha = OpcaoEscolha
CodigoArquivo = CodigoArquivo
NomeArquivo = NomeArquivo
TempoSegundos = TempoSegundos
FPS = FPS


//Verifica GPS Ligado e retona para variaveis globais a latitude e longitude
GPS_LatitudeLongitudeAtual("")
IF gsLatitude = "" THEN
gsLatitude = 0
gsLongitude = 0
END

IF ConexaoInternet(0) = 1 AND Crypto <> "" THEN


IF DebugSN = "S" THEN
Info("Com conexão ok")
END

Crypto = WS_Criptografia(GloLogin +"-"+ GloSenha +"-"+ GloImei, "C", DebugSN)

//Verifica
IF DebugSN = "S" THEN
NextTitle("MotolinkOs")
Info(Crypto, CodigoArquivo, CodOsItem, NomeArquivo, Descricao, VideoFoto, DebugSN)
END

//Autenticacao
request is GetAutenticacao
response is GetAutenticacaoResponse

Autentica, sTeste1, sTeste2, sTeste3, sTeste4 is string = ""

//Dados:
request.chave = Crypto //Chave passada por parametro

IF DebugSN = "S" THEN
Info("Cripto: "+Crypto)
END

//Envio
response = GetAutenticacao(request)
IF ErrorOccurred = True THEN

sTeste1 = response.GetAutenticacaoResult.Erro
sTeste2 = response.GetAutenticacaoResult.Erro.Mensagem
sTeste3 = response.GetAutenticacaoResult.Erro.Numero
sTeste4 = response.GetAutenticacaoResult.Erro.Descricao

NextTitle("Erro na autenticacao:")
Info(sTeste1,sTeste2,sTeste3,sTeste4)

ELSE

Autentica = response.GetAutenticacaoResult.Chave

IF DebugSN = "S" THEN
Info("Autenticacao OK",Autentica)
END

IF DebugSN = "S" AND Autentica <> "" THEN
NextTitle("MotolinkOs")
Info("OK- Autenticou",Autentica)
ELSE IF DebugSN = "S" AND Autentica = ""
NextTitle("MotolinkOs")
Info("Erro na autenticacao",Autentica, VideoFoto, Crypto)
END

//Envio do arquivo
//Busca registro
HReadSeekFirst(T020Arquivo,T020Arquivo.CodArquivo020,CodigoArquivo)
IF HFound(T020Arquivo) = False THEN

IF DebugSN = "S" THEN
NextTitle("MotolinkOs")
Info("Erro: Faltou parametros ou dados não encontrados...", ErrorInfo(),ErrorOccurred)
END

ELSE IF HFound(T020Arquivo) = True THEN

IF DebugSN = "S" THEN
NextTitle("MotolinkOs")
Info("Achou o registro a ser enviado",VideoFoto)
END

//Webservice

//Conecta com o metodo do webservice
requestfoto is ArquivoGravar
responsefoto is ArquivoGravarResponse

//Converter a imagem de um local em Array de Bytes e gravar via webservice
///////////////////////////////////////////////////////////////////////////

ImagemArrayBytes is Buffer = fLoadBuffer(T020Arquivo.PathUrl020)

IF DebugSN = "S" THEN
Info(Length(ImagemArrayBytes))
END

///////////////////////////////////////////////////////////////////////////

//Dados:
requestfoto.autenticacao = Autentica
requestfoto.codOrdemServico = CodOs
requestfoto.codOrdemServicoStatus = CodOsItem
requestfoto.descricao = Descricao
requestfoto.data = Middle(DateSys(),1,4) +"-"+ Middle(DateSys(),5,2) +"-"+ Middle(DateSys(),7,2) //Ano-mes-dia
requestfoto.latitude = gsLatitude
requestfoto.longitude = gsLongitude
requestfoto.arquivo = ImagemArrayBytes

//-----------tipo foto ou video
IF VideoFoto = "Foto"
requestfoto.codTipoArquivo = 1
ELSE IF VideoFoto = "Video"
requestfoto.codTipoArquivo = 2
ELSE
requestfoto.codTipoArquivo = 1
END
//-----------tipo foto ou video


//Envia
responsefoto = ArquivoGravar(requestfoto)
IF ErrorOccurred = True THEN
sTeste1 = responsefoto.ArquivoGravarResult.Erro
sTeste2 = responsefoto.ArquivoGravarResult.Erro.Descricao
sTeste3 = responsefoto.ArquivoGravarResult.Erro.Mensagem
sTeste4 = responsefoto.ArquivoGravarResult.Erro.Numero

NextTitle("Erro no envio da Foto")
Info(CodOsItem,Descricao,sTeste1,sTeste2,sTeste3,sTeste4)

ELSE


T020Arquivo.Enviada020 = "S"
HModify(T020Arquivo)

NextTitle("MotolinkOs")
Info("OK-Enviou a foto para o webservice com sucesso.")


END

END

IF fFileExist(T020Arquivo.PathUrl020) = False THEN
NextTitle("MotolinkOs")
Info("Caminho inexistente ou em branco!...")
END

END

END

Close()

Close()
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:14
PROCEDURE CAM_ResizeImage(LOCAL PathFileOrigemJpg is string, LOCAL PathFileDestinoJpg, LOCAL Horizontal, LOCAL Vertical, LOCAL DebugSN)

IF gsDebugSN = "S"
DebugSN="S"
END

IF Horizontal = "" OR Horizontal = 0 OR Vertical = "" OR Vertical = 0 THEN
Info("Não foi definido o tamanho Horizontal e Vertical da imagem")
ok = False
END

IF PathFileOrigemJpg <> "" AND PathFileDestinoJpg <> ""

HReadSeekFirst(T000Config,T000Config.CodConfig000,27)
IF HFound(T000Config) = True AND T000Config.Valor000 <> "" THEN
Horizontal = Middle(T000Config.Valor000,1,3)
Vertical = Middle(T000Config.Valor000,5,3)

ok = VideoGenerateThumbnail(PathFileOrigemJpg, PathFileDestinoJpg, Horizontal, Vertical)

ELSE

ok = VideoGenerateThumbnail(PathFileOrigemJpg, PathFileDestinoJpg, 640, 480)

END

IF fFileExist(PathFileDestinoJpg) THEN
IF ok = True AND DebugSN = "S"
Info("Redimensionamento realizado com sucesso!")
ok = True
END
ELSE
IF DebugSN = "S"
Info("Falha no redimensionamento da imagem!")
ok = False
END
END

ELSE

Info("Nome da imagem não foi definido!...")
ok = False

END

RESULT(ok)
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:15
// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] CAM_RotateImage (<PathImagem>, <Angulo>, <DebugSN>)
//
// Parameters:
// PathImagem: <specify the role of Arquivo>
// Angulo: <specify the role of Angulo>
// DebugSN: <specify the role of DebugSN>
// Return Value:
// boolean: // None
//
// For instance:
// Indicate an example.
//
PROCEDURE CAM_RotateImage(LOCAL PathImagem, LOCAL Angulo, LOCAL DebugSN)

//Existe Configuracao
HReadSeekFirst(T000Config,T000Config.CodConfig000,26)
IF HFound(T000Config) = True AND T000Config.Valor000 = "SIM"

IF PathImagem <> "" AND Angulo <> ""

WIN_Camera_FullScreen.IMG_Rotate = PathImagem

ok = dRotation(WIN_Camera_FullScreen.IMG_Rotate, Angulo)

IF ok = False AND DebugSN = "S" THEN
Info("Operação de Rotação Falhou")
ELSE IF ok = True AND DebugSN = "S"
Info("Rotação ok")
END

ELSE

Info("Parametros de rotação de imagem vazios nas configurações...")

END

END

IF ok = True
ok = dSaveImageJPEG(WIN_Camera_FullScreen.IMG_Rotate, PathImagem)
IF ok = False THEN
Error("Erro ao salvar imagem")
END
END


RESULT(ok)
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mai 2014 - 14:15
PROCEDURE CAM_CompressaoJpeg(LOCAL Compressao)

okimg is boolean = False

//Modifica a resolucao da imagem criada

IF Compressao <> ""

WIN_Camera_Desenvolvimento.CAM_Camera = Arquivo

IF Compressao = 100 THEN
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,100,imgProgressiveJPEG)
ELSE IF Compressao = 90
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,90,imgProgressiveJPEG)
ELSE IF Compressao = 80
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,80,imgProgressiveJPEG)
ELSE IF Compressao = 70
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,70,imgProgressiveJPEG)
ELSE IF Compressao = 60
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,60,imgProgressiveJPEG)
ELSE IF Compressao = 50
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,50,imgProgressiveJPEG)
ELSE IF Compressao = 40
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,40,imgProgressiveJPEG)
ELSE IF Compressao = 30
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,30,imgProgressiveJPEG)
ELSE IF Compressao = 20
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,20,imgProgressiveJPEG)
ELSE IF Compressao = 10
okimg = dSaveImageJPEG(WIN_Camera_Desenvolvimento.CAM_Camera,Arquivo,10,imgProgressiveJPEG)
END

WIN_Camera_Desenvolvimento.CAM_Camera = Arquivo

END

RESULT(okimg)
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 16 janvier 2020 - 12:57
// Summary: <specify the procedure action>
// Syntax:
// UI_VerArquivo ()
//
// Parameters:
// None
// Return value:
// None
//
// For instance:
// Indicate an example.
//
Procedure UI_VerArquivo()

IF gnidDocumentoCliente = 0 THEN
Info("Nenhum arquivo selecionado!")
RETURN
END

IF HReadSeek(T002_ARQUIVOS,T002_ARQUIVOSID,gnidDocumentoCliente,hIdentical) THEN

IF HFound(T002_ARQUIVOS) THEN

fMakeDir("C:\Temp\")

path_arquivo is string = T002_ARQUIVOS.T002_PATH

nome_arquivo is string = Lower(fExtractPath(path_arquivo,fFileName))

nome_extensao is string = Lower(fExtractPath(path_arquivo,fExtension))

bufArquivo is Buffer

SWITCH nome_extensao // .pdf or .png...

CASE ".pdf"

MyInternalWindow..Plane = 2
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.pdf",bufArquivo) = True THEN
control_pdf = "C:\Temp\Arquivo.pdf"
END


CASE ".docx"

MyInternalWindow..Plane = 4
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.docx",bufArquivo) = True THEN
word_control = "C:\Temp\Arquivo.docx"
END

CASE ".xlsx"

MyInternalWindow..Plane = 5
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.xlsx",bufArquivo) = True THEN
excel_control = "C:\Temp\Arquivo.xlsx"
END

CASE ".jpg"

MyInternalWindow..Plane = 3
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.jpg",bufArquivo) = True THEN
control_img = "C:\Temp\Arquivo.jpg"
END

CASE ".jpeg"

MyInternalWindow..Plane = 3
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.jpeg",bufArquivo) = True THEN
control_img = "C:\Temp\Arquivo.jpeg"
END

CASE ".png"

MyInternalWindow..Plane = 3
bufArquivo = T002_ARQUIVOS.T002_ARQUIVO
IF fSaveBuffer("C:\Temp\Arquivo.png",bufArquivo) = True THEN
control_img = "C:\Temp\Arquivo.png"
END


OTHER CASE

END

ELSE
Info("Erro ao abrir o Documento!")
END


END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 16 janvier 2020 - 12:57
Procedure UI_CarregarArquivo()

IF EDT_Descricao = "" OR EDT_Descricao = Null THEN

Info("Digite um nome para o Arquivo")
SetFocus(EDT_Descricao)
RETURN

ELSE

Arquivo is array of string
Arquivo = UI_Selecione_Imagem()


SWITCH Arquivo[2]

CASE ".pdf"
MyInternalWindow..Plane = 2
control_pdf = Arquivo[1]
CASE ".docx"
MyInternalWindow..Plane = 4
word_control = Arquivo[1]

CASE ".xlsx"
MyInternalWindow..Plane = 5
excel_control = Arquivo[1]
CASE ".jpg"
MyInternalWindow..Plane = 3
control_img = Arquivo[1]
CASE ".jpeg"
MyInternalWindow..Plane = 3
control_img = Arquivo[1]
CASE ".png"
MyInternalWindow..Plane = 3
control_img = Arquivo[1]
OTHER CASE

END



IF gnidDocumentoCliente > 0 THEN
HReadSeek(T002_ARQUIVOS, T002_ARQUIVOSID,gnidDocumentoCliente,hIdentical)
ELSE
HReset(T002_ARQUIVOS)
END



IF T002_ARQUIVOS.T002_ARQUIVOSID > 0 THEN
T002_ARQUIVOS.AUDT_Data_Upd = DateSys() + TimeSys()
T002_ARQUIVOS.AUDT_User_Upd = GnUserID
T002_ARQUIVOS.T002_ARQUIVO = fLoadBuffer(Arquivo[1])
T002_ARQUIVOS.T002_TABELA_ORIGEM = "ARQUIVOS PRONTUARIO-PACIENTE"
T002_ARQUIVOS.T002_ID_ORIGEM = pIDCliente
T002_ARQUIVOS.T002_DESCRICAO = EDT_Descricao
T002_ARQUIVOS.T002_FOTOCLIENTE = "N"
T002_ARQUIVOS.T002_PATH = Arquivo[1]
T002_ARQUIVOS.T002_NOMEARQUIVO = Arquivo[4]
T002_ARQUIVOS.T002_EXTENSAO = Arquivo[2]
T002_ARQUIVOS.T002_ARQUIVO = fLoadBuffer(Arquivo[1])
T002_ARQUIVOS.T002_DATA_CADASTRO = DateSys + TimeSys()
HReadSeek(T011_PROFISSIONAIS,T011_PROFISSIONAISID,GnUserID,hIdentical)
T002_ARQUIVOS.T002_PROFISSIONAL = T011_PROFISSIONAIS.T011_NOME
T002_ARQUIVOS.AUDT_Excluido = "N"
T002_ARQUIVOS.t002_OBSERVACOES = EDT_OBSERVACOES
IF HModify(T002_ARQUIVOS) THEN
ToastDisplay("Arquivo atualizado com sucesso",toastShort,vaMiddle,haCenter,RGB(0,0,255))
END

ELSE
gnidDocumentoCliente = GET_SEQ(T002_ARQUIVOS)
T002_ARQUIVOS.T002_ARQUIVOSID = gnidDocumentoCliente
T002_ARQUIVOS.AUDT_User_Add = GnUserID
T002_ARQUIVOS.AUDT_Data_Add = DateSys + TimeSys()
T002_ARQUIVOS.T002_ARQUIVO = fLoadBuffer(Arquivo[1])

T002_ARQUIVOS.T002_TABELA_ORIGEM = "ARQUIVOS PRONTUARIO-PACIENTE"
T002_ARQUIVOS.T002_ID_ORIGEM = pIDCliente
T002_ARQUIVOS.T002_DESCRICAO = EDT_Descricao
T002_ARQUIVOS.T002_FOTOCLIENTE = "N"
T002_ARQUIVOS.T002_PATH = Arquivo[1]
T002_ARQUIVOS.T002_NOMEARQUIVO = Arquivo[4]
T002_ARQUIVOS.T002_EXTENSAO = Arquivo[2]
T002_ARQUIVOS.T002_ARQUIVO = fLoadBuffer(Arquivo[1])
T002_ARQUIVOS.T002_DATA_CADASTRO = DateSys + TimeSys()
HReadSeek(T011_PROFISSIONAIS,T011_PROFISSIONAISID,GnUserID,hIdentical)
T002_ARQUIVOS.T002_PROFISSIONAL = T011_PROFISSIONAIS.T011_NOME
T002_ARQUIVOS.AUDT_Excluido = "N"
T002_ARQUIVOS.t002_OBSERVACOES = EDT_OBSERVACOES
IF HAdd(T002_ARQUIVOS,hForceIdAuto) = True THEN
ToastDisplay("Arquivo carregado com sucesso",toastShort,vaMiddle,haCenter,RGB(0,0,255))
ELSE
Info("Erro Tela: "+gsTela+", Erro ao carregar, tente novamente ou fale com o administrador do sistema",ErrorInfo())
gbResultSave = False
END
END


END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/