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)
<?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 "<br><br><br>--- iMapIt Uploader ---<br>Arquivo: " . $_FILES['iMapIt_File']['name'] . "<br><br>";
// 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:<br />" . $_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) {
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'] < $_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) {
// Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
$nome_final = time().'.jpg';
} else {
// Mantém o nome original do arquivo
$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)) {
// Upload efetuado com sucesso, exibe uma mensagem
echo "Upload realizado com sucesso!";
} else {
// Não foi possível fazer o upload, provavelmente a pasta está incorreta
echo "Não foi possível enviar o arquivo, tente novamente";
}
}
?>
---------------------------------------------------------------- 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)
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
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 && 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"))
IMEI = item.getString() + "";
} else {
if (fileItems==null) fileItems = new ArrayList<FileItem>();
fileItems.add(item);
}
}
//if (IMEI.equals("") || IMEI.equals("null")) {
// msg = "Invalid source";
//}
if (fileItems!=null && !fileItems.isEmpty()) {
msg = "You have uploaded following file(s): ";
for (int i=0; i<fileItems.size(); i++) {
item = (FileItem) fileItems.get(i);
fileName = item.getName();
idx = fileName.lastIndexOf("\\");
if (idx == -1) idx = fileName.lastIndexOf("/");
if (idx >= 0) {
fileName = fileName.substring(idx);
}
fileName = fileName;
item.write(new File(tempFolder + fileName));
msg += "<br><a href=\"/upload/temp/" + fileName + "\">" + fileName + "</a>";
}
}
} catch (Exception e) {
msg = e.getMessage();
}
} else {
msg += "Upload is not accepted.<br>";
msg += "Please upload file using multipart/form-data and POST method<br>";
}
%>
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE>KML Loader</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<%=msg%>
</BODY>
</HTML>
---------------------------------------------------------------- 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)
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE>iMapIt Loader Test</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<FORM id="frm" name="iMapIt_Form" action="imapit_uploader.php" method="POST" enctype="multipart/form-data">
Selecione um arquivo para transferir<br>
<INPUT id="iMapIt_File" name="iMapIt_File" type="file" style="width:100%;"/><br>
<INPUT id="submit" type="submit" value="Submit" />
</FORM>
</BODY>
</HTML>
---------------------------------------------------------------- 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.