[Resolvido] Problema com upload em diretório com nome retornado de um parâmetro
6 respostas
D
dark123
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:
<%@pageimport="org.apache.commons.fileupload.FileItem"%><%@pageimport="org.apache.commons.fileupload.servlet.ServletFileUpload"%><%@pageimport="org.apache.commons.fileupload.disk.DiskFileItemFactory"%><%@pageimport="java.util.List"%><%@pageimport="java.util.Iterator"%><%@pageimport="java.io.File"%><%out.println("<html><head></head><body>");if(ServletFileUpload.isMultipartContent(request)){out.println("Upload result: <br>");ServletFileUploadservletFileUpload=newServletFileUpload(newDiskFileItemFactory());// String uploadDir = application.getRealPath(request.getServletPath());// File uploadDir = new File(application.getRealPath("/") + "/upload/galerias/42"); //).getParent();try{ListfileItemsList=servletFileUpload.parseRequest(request);Iteratorit=fileItemsList.iterator();while(it.hasNext()){FileItemfileItem=(FileItem)it.next();if(fileItem.isFormField()){Stringidgaleria=request.getParameter("idgal");out.println(fileItem.getFieldName()+" - "+fileItem.getString()+"<br>");}else{fileItem.write(newFile(application.getRealPath("/")+"/upload/galerias/"+idgaleria+"/"+(newFile(fileItem.getName()).getName())));out.println("File <img src='galerias/42/"+(newFile(fileItem.getName()).getName())+"' /> was sucessfully saved on server.<br><br>");}}}catch(Exceptionex){out.println(ex.getMessage());}}elseout.println("No Files send.");out.println("</body></html>");%>
Tem que ser JSP mesmo, pois estou utilizando includes.
String dir = application.getRealPath("arquivos");
String fullDir = dir + "/" + filename;
funciona aqui sem problema! se não estiver conseguindo posta denovo
D
dark123
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
dark123
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
<divalign=right><formaction="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();%><inputtype="hidden"name="pasta"value="<%=rs.getString("titgaleria")%>"><inputtype="file"><br><inputtype="file"><br><inputtype="file"><br><inputtype="file"><br><inputtype="file"><br><inputtype="file"><p><inputtype="submit"value="enviar"><%rs.close();}catch(SQLExceptionsqlex){out.println("Erro encontrado");}%></form></div>
upload.jsp
<%@pageimport="org.apache.commons.fileupload.FileItem"%><%@pageimport="org.apache.commons.fileupload.servlet.ServletFileUpload"%><%@pageimport="org.apache.commons.fileupload.disk.DiskFileItemFactory"%><%@pageimport="java.util.List"%><%@pageimport="java.util.Iterator"%><%@pageimport="java.io.File"%><%out.println("<html><head></head><body>");if(ServletFileUpload.isMultipartContent(request)){Stringidgaleria=request.getParameter("pasta");out.println("Upload result: <br>");ServletFileUploadservletFileUpload=newServletFileUpload(newDiskFileItemFactory());// String uploadDir = application.getRealPath(request.getServletPath());// File uploadDir = new File(application.getRealPath("/") + "/upload/galerias/42"); //).getParent();try{ListfileItemsList=servletFileUpload.parseRequest(request);Iteratorit=fileItemsList.iterator();while(it.hasNext()){FileItemfileItem=(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(newFile(application.getRealPath("/")+"/upload/galerias/"+fileItem.getString()));}}}catch(Exceptionex){out.println(ex.getMessage());}}elseout.println("No Files send.");out.println("</body></html>");%>
O subdiretório retornado por parâmetro é "paixões", então não sei o porque de acesso negado :shock:
D
dark123
Era só adicionar um atributo name=“form” na tag form e resolveria.
Resolvido!
[]s
P
Pacato
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:
<%@pagelanguage="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><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"><title>upload</title></head><body><formaction="ServletUpload"name="form"enctype="multipart/form-data"/>
Upload: <inputtype="file"name="arquivo"/><inputtype="submit"name="enviar"value="Enviar"/></form></body></html>