Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Pagetitle
CpyF2Web
CpyF2Web


Nota
titleInformações importantes

🚨 Função disponível somente para o WebApp, a partir da versão 9.1.x.

A função copia um arquivo do ambiente do servidor (a partir do rootpath) ou do cliente (WebAgent), para o SmartClient HTML.
Se o arquivo for copiado para a pasta temporária ( user ) no Servidor Web, esta pasta é deletada automaticamente quando a sessão é finalizada.
Já se o arquivo for copiado para a pasta de persistência (Cache) do servidor Web, a pasta será mantida no servidor Web até que seja excluída manualmente pelo administrador do ambienteentre o Servidor e a Estação de Trabalho e vice-versa.

Sintaxe

Bloco de código
collapsefalse
CpyF2Web( < cOrigem >, [ lIsUserDiskDir ], [ lCompactCopy ], [ lChangeCase ], [ lUnZipFile ] )

...

Nome

Tipo

Descrição

Obrigatório

Referência

cOrigem

caractere

Indica o arquivo a ser usado como origem da cópiade origem para a cópia.

Para cópia de um arquivo do Servidor para a Estação de Trabalho utilize:

CpyF2Web("/images/imagem.png", ...

Para cópia de um arquivo da Estação de Trabalho para o Servidor utilize:

Para Windows:

CpyF2Web("c:/images/imagem.png",...

Para Linux/MacOS:

CpyF2Web("l:/images/imagem.png",...

X


LIsUserDiskDir

lógico

Se LIsUserDiskDir for definido como .T. (Default)

O arquivo será copiado para a pasta .../appserver/webapp/user/<ID do usuário>/.

Essa pasta é temporária, permitindo o uso do arquivo durante a sessão deste usuário, sendo excluída na sequência.

Exemplo de retorno copiando o arquivo para a pasta USER:

cf899c9b-7ab5-4d60-a2b6-a35651a9d18f/user/4255d3238e2e4c00921b449a59111f95/file.txt

Se LIsUserDiskDir for definido como .F.

O arquivo será copiado para a pasta .../appserver/webapp/cache/<environment>/.

Essa pasta é excluida caso:
-O Servidor de Aplicação (AppServer) seja reiniciado;
-O Administrador do ERP a exclua manualmente.

Exemplo de retorno copiando o arquivo para a pasta CACHE:

cf899c9b-7ab5-4d60-a2b6-a35651a9d18f/cache/sqlite/file.txt

lIsUserDiskDir

lógico

Indica se o arquivo vai ser salvo na pasta temporária ou na pasta do Environment onde está o Servidor Web. Default = .T. (verdadeiro).



lCompactCopy

lógico

Indica se o arquivo deve ser internamente compactado (.T.) antes de fazer a cópia. Default = .T. (verdadeiro).



lChangeCase

lógico

Se verdadeiro (.T.), nomes de arquivos e pastas serão convertidos para letras minúsculas;
caso contrário, falso (.F.), não será feito nenhum ajuste no nome do arquivo informado. Default = .T. (verdadeiro).

Veja maiores informações em Observações.



lUnZipFile

lógico

Se verdadeiro (.T.), o arquivo será descompactado . caso contrário, falso (.F.), não faz nada. no diretório de destino. Default = .F. (falso).



Retorno

Nome

Tipo

Descrição

nRetcRet

numéricocaractere

Retorna o caminho do servidor web onde o arquivo foi salvo com sucesso. Caso ocorra alguma falha na cópia, retorna um valor vazio.

Informações
icontrue
titleObservações
  • Esta função está disponível somente para o SmartClient HTML.
  • A função CpyF2Web exige que o programa AdvPL que a execute seja um SmartClient, não permitindo, portanto, que seja chamada em JOB. A partir da build 7.00.210324P, caso a função seja chamada em JOB, o programa será finalizado com ocorrência de erro fatal não permite execução via Job, sendo finalizada com a mensagem de erro: "Function CpyF2Web() doesn't available in JOB.".
  • Em caso de falha, pode ser utilizada a função FError, porém não é possível saber se a falha na cópia está relacionada com algum problema de acesso na origem, no destino, ou mesmo durante a cópia. Normalmente as causas mais prováveis de falha são inconsistências nos parâmetros, como especificar um arquivo de origem que não existe, ou que esteja em uso por outro processo; ou especificar um diretório de destino que não exista; ou que o usuário que iniciou o programa não tenha direitos de escrita; falta de espaço em disco no destino durante a cópia; falha no acesso ao sistema de arquivos na pasta temporária do servidor Web ou do SmartClient; ou ainda o arquivo já exista no diretório de destino, e esteja em uso por outro processo.
  • Caso a compactação esteja habilitada (Default = .T.), no parâmetro <lCompactCopy>, o arquivo será compactado automaticamente no client antes do envio, e descompactado automaticamente no servidor Web. Para a grande parte dos tipos de arquivo, utilizar a compactação reduz o tempo de cópia, pois o conteúdo trafegado pela rede é menor. Para tráfego de arquivos que já possuem algum tipo de compressão de dados (ZIP, TAR, RAR, JPG, MPG), é mais eficiente especificar este parâmetro com .F., para que a compactação automática não seja utilizada, pois nestes casos a mesma não agregará nenhum ganho neste processo. O arquivo compactado é gravado na pasta temporária do client e descompactado na pasta de destino do servidor Web.
  • O parâmetro opcional lChangeCase foi introduzido pois em sistemas LINUX/UNIX, existe a diferenciação entre maiúsculo e minúsculo em nomes de arquivos ou pastas. Quando este parâmetro for informado, terá prioridade sobre comportamento de Case Sensitive definido pelas chaves de ini CASESENSITIVE ou SERVERTYPE. Porem, quando não especificado o parâmetro, o valor padrão (.T.) fica condicionado ao que está configurado nessas chaves.
  • Em ambiente Windows, os nomes de arquivos e pastas não possuem diferenciação entre maiúsculo e minúsculo, logo, a função conseguirá tratar os arquivos e pastas independente do valor definido no parâmetro lChangeCase.
  • Quando o SmartClient utilizado for uma build nativa Linux ou Mac, sabe-se que sistema de arquivos destas plataformas não têm unidade de disco, a nomenclatura dos arquivos é case sensitive (letras minúsculas diferente de maiúsculas), e as barras separadoras de diretório / pasta são barras normais "/" ao invés de barras inversas "\". Mesmo nestes casos, deve-se especificar uma letra de unidade de disco no diretório de destino; pois quando o SmartClient em Linux e/ou Mac receber o diretório de destino, com a unidade de disco especificada, a unidade de disco será ignorada e as barras serão internamente invertidas. Por exemplo, a cópia especificando o path de destino "C:\USER\LOCAL\TEMP\" será interpretado pelo SmartClient Linux e/ou Mac como "/user/local/temp/".

  • É importante evitar o uso do parâmetro <lCompactCopy> caso esteja copiando um arquivo já compactado (ex: ZIP, TAR, etc), evitando um processo desnecessário.

  • Para Linux, o parâmetro <lChangeCase> definido como (.T.) tem prioridade em relação às chaves CASESENSITIVE ou SERVERTYPE definidas no appserver.ini.
  • Para Windows, o parâmetro <lChangeCase> não influência na utilização, pois este sistema operacional é case insensitive.

  • Quando referenciar arquivos na estação de trabalho é importante utilizar uma letra de drive, ex c:\, mesmo em Linux/MacOS, para que haja uma diferenciação da origem do arquivo:
    Para Windows: 
    "c:\diretorio\arquivo"
    Para Linux/MacOS:
    "l:/diretorio/arquivo"

  • Quando a origem estiver na estação de trabalho é obrigatório a utilização do WebAgent para a cópiaQuando a origem for do lado do cliente é obrigatório a utilização do WebAgent.

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
#include "TOTVS.CH"

User Function drivetoweb()
	// Copia arquivo do remote local para o servidor Web, sem compactação antes de transmitir
	Local nRetcRet := CpyF2Web("c:/arquivos/origem.zip", .T., .F., .T., .F.)
	If (nRetcRet != "")
		conout(nRetcRet) // f85852b1-ab7d-44df-9c19-f146e476fa16/user/4833a3e64891454fb5549359273c3727/origem.zip
	Else
		conout("Falha na copia")
	EndIf
Return

User Function servetoweb()
	// Copia arquivo do servidor para o Servidor Web, compactando antes de transmitir
	Local nRetcRet := CpyF2Web("/images/imagem.png", .F., .T., .F., .F.)
	If (nRetcRet != "")
		conout(nRetcRet) // 4d8a25c6-474e-4f40-bc2d-8c3b76b51e55/cache/environment/imagem.png
	Else
		conout("Falha na copia")
	EndIf
Return

User Function unixtoweb()
	// Utilizando Linux como exemplo para copia do arquivo do remote local para o servidor Web
	Local nRetcRet := CpyF2Web("l:/home/user/teste.png", .T., .T., .T., .T.)
	If (nRetcRet != "")
		conout(nRetcRet)
	Else
		conout("Falha na copia" + nRetcRet)
	EndIf
Return

Veja também

...