PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 24 → upload image with HTTPRequest
upload image with HTTPRequest
Débuté par E. Meijer, 05 nov. 2013 13:14 - 6 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é
2 962 messages
Popularité : +89 (91 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é
2 962 messages
Popularité : +89 (91 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é
2 962 messages
Popularité : +89 (91 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é
2 962 messages
Popularité : +89 (91 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é
2 962 messages
Popularité : +89 (91 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é
2 962 messages
Popularité : +89 (91 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)