iMapIt Pro 2.0 Funcionalidade de Transferencia do Arquivo Exportado para um Site Web
Autor: iMapIt | Publicado: 2013-03-16T20:25:00-07:00

Uma das principais funcionalidades da versão 2.0 do iMapIt Pro é permitir que o arquivo exportado, agora nos formados DXF, KML ou GPX, além de poder ser extraído via cabo, pela porta USB e enviado por e-mail, também pode ser enviado via web para um servidor internet.

O objetivo desse artigo é explicar como a funcionalidade de envio do arquivo via internet pode ser utilizada.
Ao se selecionar a opção "Web" sob "Enviar para:" será apresentado um campo logo abaixo que permitirá a digitação do endereço de internet para o qual o arquivo deverá ser enviado.






Ao se clicar no botão Exportar arquivo será enviado para o endereço informado e uma tela de resposta será apresentada com o retorno do servidor.




Porém, para que esse envio funcione corretamente, o servidor indicado no endereço de internet deverá estar preparado para receber o arquivo. Portanto, você terá que ter acesso a este servidor, para poder configura-lo de forma a receber o arquivo e salva-lo onde julgar apropriado dentro do servidor.

Como configurar o servidor para receber o arquivo?

Desenvolvemos dois exemplos de scripts para servidores de internet que podem ser utilizados para receber o arquivo enviado pelo iMapIt Pro.
O primeiro exemplo é um script PHP. PHP é uma das linguagens de programação para servidores de internet. Este tipo de arquivo funciona em servidores Apache.
Seguindo o exemplo, o arquivo abaixo deve ser salvo com o nome "imapit_uploader.php".

------------------------------------------------------------- Início do arquivo PHP (não inclua essa linha)


&lt;?php



// iMapIt Uploader

// Exemplo de script php para upload do arquivo enviado pela aplicação iMapIt

// Script original: http://blog.thiagobelem.net/upload-de-arquivos-com-php/



// Pasta onde o arquivo vai ser salvo

$_UP['pasta'] = 'uploads/';



// Tamanho máximo do arquivo (em Bytes)

$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb



// Array com as extensões permitidas

$_UP['extensoes'] = array('dxf', 'kml', 'gpx');



// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)

$_UP['renomeia'] = false;



// Array com os tipos de erros de upload do PHP

$_UP['erros'][0] = 'Não houve erro';

$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';

$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';

$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';

$_UP['erros'][4] = 'Não foi feito o upload do arquivo';



// Desloca a mensagem final algumas linhas para baixo

echo "&lt;br&gt;&lt;br&gt;&lt;br&gt;--- iMapIt Uploader ---&lt;br&gt;Arquivo: " . $_FILES['iMapIt_File']['name'] . "&lt;br&gt;&lt;br&gt;";



// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro

if ($_FILES['iMapIt_File']['error'] != 0) {

die("Não foi possível fazer o upload, erro:&lt;br /&gt;" . $_UP['erros'][$_FILES['iMapIt_File']['error']]);

exit; // Para a execução do script

}



// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar



// Faz a verificação da extensão do arquivo

$extensao = strtolower(end(explode('.', $_FILES['iMapIt_File']['name'])));

if (array_search($extensao, $_UP['extensoes']) === false) {

&nbsp; &nbsp; echo "Por favor, são permitidos apenas arquivos com as extensões: dxf, kml ou gpx";

}



// Faz a verificação do tamanho do arquivo

else if ($_UP['tamanho'] &lt; $_FILES['iMapIt_File']['size']) {

echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";

}



// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta

else {

// Primeiro verifica se deve trocar o nome do arquivo

if ($_UP['renomeia'] == true) {

&nbsp; &nbsp; // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg

&nbsp; &nbsp; $nome_final = time().'.jpg';

} else {

&nbsp; &nbsp; // Mantém o nome original do arquivo

&nbsp; &nbsp; $nome_final = $_FILES['iMapIt_File']['name'];

}



// Depois verifica se é possível mover o arquivo para a pasta escolhida

if (move_uploaded_file($_FILES['iMapIt_File']['tmp_name'], $_UP['pasta'] . $nome_final)) {

&nbsp; &nbsp; // Upload efetuado com sucesso, exibe uma mensagem

&nbsp; &nbsp; echo "Upload realizado com sucesso!";

&nbsp; &nbsp; } else {

&nbsp; &nbsp; &nbsp; &nbsp; // Não foi possível fazer o upload, provavelmente a pasta está incorreta

&nbsp; &nbsp; &nbsp; &nbsp; echo "Não foi possível enviar o arquivo, tente novamente";

&nbsp; &nbsp; }

}

?&gt;

---------------------------------------------------------------- Fim do arquivo PHP (não inclua essa linha)


Você só precisará de um tipo de script no servidor de internet, mas vamos oferecer um outro exemplo, agora em JSP. JSP é um outro tipo de linguagem para programação de servidores de internet e funciona em servidores Apache Tomcat.
Seguindo o exemplo, o arquivo abaixo deve ser salvo com o nome "imapit_uploader.jsp".

------------------------------------------------------------- Início do arquivo JSP (não inclua essa linha)


&lt;%@ page language="java" contentType="text/html;charset=utf-8"%&gt;

&lt;%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%&gt;

&lt;%@ page import="java.io.*,java.util.*, javax.servlet.*" %&gt;

&lt;%@ page import="javax.servlet.http.*" %&gt;

&lt;%@ page import="org.apache.commons.fileupload.*" %&gt;

&lt;%@ page import="org.apache.commons.fileupload.disk.*" %&gt;

&lt;%@ page import="org.apache.commons.fileupload.servlet.*" %&gt;

&lt;%@ page import="org.apache.commons.io.output.*" %&gt;

&lt;%

File file;

int MAX_FILE_SIZE = 5 * 1024 * 1024;

int MAX_MEM_SIZE = 1 *1024 * 1024;

ServletContext context = pageContext.getServletContext();

String tempFolder = context.getInitParameter("temp-folder");

String IMEI="", method="", msg="";

boolean isMultipart;

method = request.getMethod();

isMultipart = ServletFileUpload.isMultipartContent(request);



if (isMultipart &amp;&amp; method.equalsIgnoreCase("POST")) {

 DiskFileItemFactory factory = new DiskFileItemFactory();

 // maximum size that will be stored in memory

 factory.setSizeThreshold(MAX_MEM_SIZE);

 // Location to save data that is larger than maxMemSize.

 factory.setRepository(new File(tempFolder));

 

 ServletFileUpload upload = new ServletFileUpload(factory);

 upload.setSizeMax(MAX_FILE_SIZE);

 List items = null, fileItems = null;

 FileItem item;

 String fileName="";

 try {

  items = upload.parseRequest(request);

  Iterator itr = items.iterator();

  int idx;

  while (itr.hasNext()) {

   item = (FileItem) itr.next();

   if (item.isFormField()) {

    if (item.getFieldName().equalsIgnoreCase("IMEI"))&nbsp;

     IMEI = item.getString() + "";

   } else {

    if (fileItems==null) fileItems = new ArrayList&lt;FileItem&gt;();

    fileItems.add(item);

   }

  }

  //if (IMEI.equals("") || IMEI.equals("null")) {

  // msg = "Invalid source";

  //}

  if (fileItems!=null &amp;&amp; !fileItems.isEmpty()) {

   msg = "You have uploaded following file(s): ";

   for (int i=0; i&lt;fileItems.size(); i++) {

    item = (FileItem) fileItems.get(i);

    fileName = item.getName();

    idx = fileName.lastIndexOf("\\");

    if (idx == -1) idx = fileName.lastIndexOf("/");

    if (idx &gt;= 0) {

     fileName = fileName.substring(idx);

    }

    fileName = fileName;

    item.write(new File(tempFolder + fileName));

    msg += "&lt;br&gt;&lt;a href=\"/upload/temp/" + fileName + "\"&gt;" + fileName + "&lt;/a&gt;";

   }

  }

 } catch (Exception e) {

  msg = e.getMessage();

 }

} else {

 msg += "Upload is not accepted.&lt;br&gt;";

 msg += "Please upload file using multipart/form-data and POST method&lt;br&gt;";

}

%&gt;

&lt;!DOCTYPE HTML&gt;

&lt;HTML&gt;

&lt;HEAD&gt;

 &lt;TITLE&gt;KML Loader&lt;/TITLE&gt;

 &lt;META http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;/HEAD&gt;

&lt;BODY&gt;

 &lt;%=msg%&gt;

&lt;/BODY&gt;

&lt;/HTML&gt;

---------------------------------------------------------------- Fim do arquivo JSP (não inclua essa linha)

Se alguém tiver mais algum exemplo de script para compartilhar, o mesmo será muito bem vindo.

Bem, para testar se o seu script de upload está funcionando corretamente, você pode utilizar o código HTML exemplificado a seguir. Esse código pode ser salvo com o nome "teste_upload.html".

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)


&lt;!DOCTYPE HTML&gt;

&lt;HTML&gt;

&nbsp; &nbsp; &lt;HEAD&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TITLE&gt;iMapIt Loader Test&lt;/TITLE&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;META http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&nbsp; &nbsp; &lt;/HEAD&gt;

&nbsp; &nbsp; &lt;BODY&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;FORM id="frm" name="iMapIt_Form" action="imapit_uploader.php" method="POST" enctype="multipart/form-data"&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Selecione um arquivo para transferir&lt;br&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;INPUT id="iMapIt_File" name="iMapIt_File" type="file" style="width:100%;"/&gt;&lt;br&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;INPUT id="submit" type="submit" value="Submit" /&gt;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/FORM&gt;

&nbsp; &nbsp; &lt;/BODY&gt;

&lt;/HTML&gt;

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)

O exemplo de arquivo HTML acima é como o iMapIt Pro do seu iPhone ou iPad irá transferir o arquivo exportado. Se o arquivo de teste acima funcionar chamando o script PHP "imapit_uploader.php" e transferindo um arquivo, o iMapIt Pro também funcionará.

Fiquem à vontade para enviar perguntas ou sugestões.