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

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:

[code]<%@ 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("");
if (ServletFileUpload.isMultipartContent(request))
{
out.println(“Upload result:
“);
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("");

%>[/code]

Tem que ser JSP mesmo, pois estou utilizando includes.

Agradeço uma ajudinha.

[]s

vc ja conseguiu fazer algum upload?

eu uso assim

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

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

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.

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

[code]<%@ 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("");
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("");

%>[/code]

Visualização:

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

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

Resolvido!

[]s

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:

[code]<%@ page language=“java” contentType=“text/html; charset=utf-8”
pageEncoding=“utf-8”%>

upload Upload:
    <input type="submit" name="enviar" value="Enviar" />
    
    </form>
</body>
[/code]

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