[Resolvido] Problema com upload em diretório com nome retornado de um parâmetro

6 respostas
D

Oi.

Estou com um problema com um upload em uma página que cria diretórios e
seta seu nome no banco de dados e em um parâmetro para outra página que
enviará as imagens para lá.

Eu não consigo pegar o parâmetro "nome do diretório" e setar na url para enviar as imagens.
Sempre returna null.

Vejam:

<%@ page import="org.apache.commons.fileupload.FileItem"  %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"  %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"  %>
<%@ page import="java.util.List"  %>
<%@ page import="java.util.Iterator"  %>
<%@ page import="java.io.File"  %>

<%

out.println("<html><head></head><body>");
if (ServletFileUpload.isMultipartContent(request))
{
 	out.println("Upload result: <br>");
	ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
//	String uploadDir = application.getRealPath(request.getServletPath());
 // File uploadDir = new File(application.getRealPath("/") + "/upload/galerias/42"); //).getParent();

	try {
	  	List fileItemsList = servletFileUpload.parseRequest(request);
		Iterator it = fileItemsList.iterator();
		while (it.hasNext())
		{
			FileItem fileItem = (FileItem)it.next();
			if (fileItem.isFormField())
			{
              String idgaleria = request.getParameter("idgal");

			 out.println(fileItem.getFieldName()+" - "+fileItem.getString()+"<br>");
			}
			else
			{
				fileItem.write(new File(application.getRealPath("/") +
                    "/upload/galerias/"+idgaleria+"/"+(new File(fileItem.getName()).getName())));
    out.println("File <img src='galerias/42/"+(new File(fileItem.getName()).getName())+"' /> was sucessfully saved on server.<br><br>");
			}
		}

	}
	catch (Exception ex) {
	    out.println(ex.getMessage());
	}

}
else
	out.println("No Files send.");
out.println("</body></html>");


%>

Tem que ser JSP mesmo, pois estou utilizando includes.

Agradeço uma ajudinha.

[]s

6 Respostas

arthurminarini

vc ja conseguiu fazer algum upload?

arthurminarini

eu uso assim

String dir = application.getRealPath("arquivos");
String fullDir = dir + "/" + filename;

funciona aqui sem problema! se não estiver conseguindo posta denovo

D

Sim, o upload eu consigo sim, só que não para o diretório pêgo por parâmetro.

Imagine este seu próprio exemplo, acrescente isto:

String subdir = request.getParameter("imagem"); String dir = application.getRealPath("arquivos"); String fullDir = dir + "/" +subdir+ "/"+ filename;

É isto que estou tentando fazer, entende?!
Só que retorna null no nome do subdiretório, pois acho que não está capturando o parâmetro.

A pergunta é: Em qual parte do código devo capturar o parâmetro então?

obrigado.

D

Agora consegui pegar o parâmetro do nome do subdiretório que é para onde a imagem vai, só que mostra mensagem de acesso negado.

index.jsp
<div align=right>
          <form action="upload.jsp" method="post" enctype="multipart/form-data">
         <% try {
            pstmt = conn.prepareStatement("SELECT titgaleria FROM galeriasapae WHERE idgaleria = ?");
            pstmt.setObject(1, sid);
            rs = pstmt.executeQuery();
            rs.next(); %>
           <input type="hidden" name="pasta" value="<%=rs.getString("titgaleria")%>">
           <input type="file">
           <br><input type="file">
           <br><input type="file">
           <br><input type="file">
           <br><input type="file">
           <br><input type="file">
           <p><input type="submit" value="enviar">
           <% rs.close(); } catch (SQLException sqlex) { out.println("Erro encontrado"); } %>
           </form>
           </div>
upload.jsp
<%@ page import="org.apache.commons.fileupload.FileItem"  %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"  %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"  %>
<%@ page import="java.util.List"  %>
<%@ page import="java.util.Iterator"  %>
<%@ page import="java.io.File"  %>

<%

out.println("<html><head></head><body>");
if (ServletFileUpload.isMultipartContent(request))
{
    String idgaleria = request.getParameter("pasta");
            
 	out.println("Upload result: <br>");
	ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
//	String uploadDir = application.getRealPath(request.getServletPath());
 // File uploadDir = new File(application.getRealPath("/") + "/upload/galerias/42"); //).getParent();

	try {
	  	List fileItemsList = servletFileUpload.parseRequest(request);
		Iterator it = fileItemsList.iterator();
		while (it.hasNext())
		{
			FileItem fileItem = (FileItem)it.next();
			if (!fileItem.isFormField())
			{
                            // String idgaleria = request.getParameter("pasta");
                          //  String nome = (new File(fileItem.getName()).getName());
                          //  String valor = fileItem.getString();
			}
			else
			{
				fileItem.write(new File(application.getRealPath("/") + "/upload/galerias/" +fileItem.getString()));
     
                       }
		}

	}
	catch (Exception ex) {
	    out.println(ex.getMessage());
	}

}
else
	out.println("No Files send.");
out.println("</body></html>");


%>

Visualização:

[img]http://i60.servimg.com/u/f60/11/80/81/44/negado10.gif[/img]

O subdiretório retornado por parâmetro é "paixões", então não sei o porque de acesso negado :shock:

D

Era só adicionar um atributo name=“form” na tag form e resolveria.

Resolvido!

[]s

P

Cara to com um problema semelhante...

Você poderia me dar uma ajuda?

Estou tentando fazer um upload de um arquivo e pegar o caminho dele (ou seja, o arquivo) para adicionar no BD

tento usar o request.getRealPath só que vem o endereço do servidor junto (ele estátrazendo o caminho do meu arquivo jsp (C:\Desktop\apache-tomcat\wtpwebapps\Cards\arquivo)
E não o caminho que está o arquivo

jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>upload</title>
    </head>
    <body>
        <form action="ServletUpload" name="form" enctype="multipart/form-data"/>
        Upload: <input type="file" name="arquivo"/>
       
        <input type="submit" name="enviar" value="Enviar" />
        
        </form>
    </body>
</html>

a classe está no tópico http://www.guj.com.br/java/282238-fazer-upload-de-arq-excel-com-jsp-e-receber-na-classe-para-enviar-ao-bd

Criado 13 de fevereiro de 2009
Ultima resposta 14 de set. de 2012
Respostas 6
Participantes 3