botão subir imagem

7 respostas
guisantogui

Olá pessoal estou iniciando com o desenvolvimento web e queria saber como eu farei para colocar um botão onde ao clicar o usuário deverá escolher uma imagem do seu computador. Acho que não é com o JDialog, certo? pelo menos não consegui fazer assim!

Vale lembrar estou usando o Google App Engine e sua SDK e plugin para o eclipse.
Brigadão

7 Respostas

rodrigo.manfre

Não pode ser um input file?
Ele abre uma tela para você escolher um arquivo, não somente imagem, ai é preciso realizar o upload dessa imagem na parte server da sua programação, caso sirva, use

<input type=“file” name=“arquvo”>

Att

guisantogui

Ok, o campo apareceu, mas agora não consigo pegar o arquivo que eu enviei, segue a minha servlet e a minha JSP:

Servlet:

package application;


import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.servlet.http.*;
import javax.swing.JOptionPane;

import application.Greeting;
import application.PMF;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;


public class SignGuestbookServlet extends HttpServlet {
	
	private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        String content = req.getParameter("content");
        
        Object bj = req.getParameter("img");
        System.out.println(bj);
        
        if(!content.isEmpty()){
	        Date data = new Date();
	        
	        Greeting g = new Greeting(user, content, data);
	        
	        PersistenceManager pm = PMF.get().getPersistenceManager();
	        
	        try{
	        	pm.makePersistent(g);
	        }
	        finally{
	        	pm.close();
	        }
        }
        else{
        	
        }
        if (user != null) {
            log.info("Greeting posted by user " + user.getNickname() + ": " + content);
        } else {
            log.info("Greeting posted anonymously: " + content);
        }
        resp.sendRedirect("guestbook.jsp");
    }
}

JSP:

&lt;%@ page contentType="text/html; charset=UTF-8" language="java" %&gt;
&lt;%@ page import="java.util.List" %&gt;
&lt;%@ page import="javax.jdo.PersistenceManager" %&gt;
&lt;%@ page import="com.google.appengine.api.users.User" %&gt;
&lt;%@ page import="com.google.appengine.api.users.UserService" %&gt;
&lt;%@ page import="com.google.appengine.api.users.UserServiceFactory" %&gt;
&lt;%@ page import="application.Greeting" %&gt;
&lt;%@ page import="application.PMF" %&gt;

&lt;html&gt;

	&lt;head&gt;
		&lt;link type="text/css" rel="stylesheet" href="/stylesheets/main.css"&gt;
	&lt;/head&gt;

  	&lt;body&gt;
  	<p>
  	Write your greeting here:
  	</p>
  	&lt;form action="/sign" method="post"&gt;
    	&lt;div&gt;&lt;textarea name="content" rows="3" cols="60"&gt;&lt;/textarea&gt;&lt;/div&gt;
    	&lt;div&gt;&lt;input type="submit" value="Post Greeting" /&gt;&lt;/div&gt;
  	&lt;/form&gt;
  	
  	Put an image at your greeting:<br/>
  	&lt;input type="file" name="greetingImage" value="img"&gt;

&lt;%
    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    if (user != null) {
%&gt;
		<p>Hello, &lt;%= user.getNickname() %&gt;! (You can
		<a >sign out</a>.)</p>
&lt;%
    } else {
%&gt;
		<p>Hello!
		<a >Sign in</a>
		to include your name with greetings you post.</p>
&lt;%
    }
    
	PersistenceManager pm = PMF.get().getPersistenceManager();
	String query = &quot;select from &quot; + Greeting.class.getName() + &quot; order by date desc range 0,5&quot;;
	List&lt;Greeting&gt; gs = (List&lt;Greeting&gt;) pm.newQuery(query).execute();
	if(gs.isEmpty()){
%&gt;

	<p>Have no messages in Guestbook.</p>

&lt;%	}
	else{
		for(Greeting g: gs){
			if(g.getAuthor() == null){
%&gt;
&lt;div align="center"&gt;
	<p>An anonimus wrote:</p>
&lt;/div&gt;

&lt;%
            }
            else {
%&gt;
&lt;div align="center"&gt;
	<p><b>&lt;%= g.getAuthor().getNickname() %&gt;</b> wrote:</p>
&lt;/div&gt;
&lt;%
            }
%&gt;
&lt;div align="center"&gt;
	<p>At time: &lt;%= g.getDate() %&gt;</p>
	&lt;blockquote&gt; Message: &lt;%= g.getContent() %&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;%
        }
    }
    pm.close();
%&gt;			
	
  &lt;/body&gt;
&lt;/html&gt;

Desculpem as possíveis gambiarras, mas sou novato na programação pra Web.

rodrigo.manfre

Quando você utiliza input do tipo file, o seu form tem que ser um atributo específico que o enctype=“multipart/form-data” senão o arquivo não vai no seu submit.
Um detalhe no seu código do jsp é que o input file tem que ficar dentro do form, algo como esse código:

<form action=“sua action” enctype=“multipart/form-data” method=“post”>
<input type=“file” name=“datafile” size=“40”>
<input type=“submit” value=“Enviar”>
</form>

Espero ter ajudado

guisantogui

Então, acho que detectei outro problema ao colocar este campo na JSP eu preciso de um form específico para ele, certo?
Pois estou colocando juntamente em um form com um campo de texto e está dizendo que o campo está nulo, sendo que não esta!

A Pergunta é, tenho que deixar um form específico para o upload do arquivo ou tem como integrar em outro form? (Sem ter que clicar no botão “Enviar arquivo” e depois “Enviar mensagem”)

Brigadão.

rodrigo.manfre

Não precisa ser um específico não, basta os campos estarem dentro do form que todos eles vão ser enviados, o único detalhe é que você tem que acrescentar enctype=“multipart/form-data” na sua tag <form> para poder enviar o arquivo.
Talvez vc tenha que usar o fileUpload do jakarta commons para recuperar os outros dados, da uma olhada no código que tem nesse link, http://javafree.uol.com.br/topic-850330-Problemao-enctype=multipart-formdata.html

guisantogui

Bah cara, não me acertei com esse jankra aí, tava tentando subir a imagem em uma servlet diferente, mas sempre que tento o valor retorna nulo e não sei por que, fica o código:

Servlet que eu criei (nova):

package application;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendFileServlet extends HttpServlet{
	
	public void doPost(HttpServletRequest req, HttpServletResponse resp){
		 
		String teste = req.getParameter("img");
		
		System.out.println(teste);
		
		
	}

}
Servlet antiga:
package application;


import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.servlet.http.*;

import application.Greeting;
import application.PMF;


import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;


public class SignGuestbookServlet extends HttpServlet {
	
	private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        String content = req.getParameter("content");
        
        Object bj = req.getParameter("img");
        System.out.println(bj);
        
     //   if(!content.isEmpty()){
	        Date data = new Date();
	        
	        Greeting g = new Greeting(user, content, data);
	        
	        PersistenceManager pm = PMF.get().getPersistenceManager();
	        
	        try{
	        	pm.makePersistent(g);
	        }
	        finally{
	        	pm.close();
	        }
     //   }
     //   else{
        	
       // }
        if (user != null) {
            log.info("Greeting posted by user " + user.getNickname() + ": " + content);
        } else {
            log.info("Greeting posted anonymously: " + content);
        }
        resp.sendRedirect("guestbook.jsp");
    }
}

JSP:

&lt;%@ page contentType="text/html; charset=UTF-8" language="java" %&gt;
&lt;%@ page import="java.util.List" %&gt;
&lt;%@ page import="javax.jdo.PersistenceManager" %&gt;
&lt;%@ page import="com.google.appengine.api.users.User" %&gt;
&lt;%@ page import="com.google.appengine.api.users.UserService" %&gt;
&lt;%@ page import="com.google.appengine.api.users.UserServiceFactory" %&gt;
&lt;%@ page import="application.Greeting" %&gt;
&lt;%@ page import="application.PMF" %&gt;

&lt;html&gt;

	&lt;head&gt;
		&lt;link type="text/css" rel="stylesheet" href="/stylesheets/main.css"&gt;
	&lt;/head&gt;

  	&lt;body&gt;
  	<p>
  	Write your greeting here:
  	</p>
  	&lt;form action="/sign" method="post"&gt;    	
    	&lt;div&gt;&lt;textarea name="content" rows="3" cols="60"&gt;&lt;/textarea&gt;&lt;/div&gt;
    	&lt;div&gt;&lt;input type="submit" value="Post Greeting" /&gt;&lt;/div&gt;
  	&lt;/form&gt;
  	
  	&lt;form action="/sendFile" method="post" enctype="multipart/form-data"&gt;
    	Put an image at your greeting:<br/>
  		&lt;input type="file" name="greetingImage" value="img" name="img"&gt;
  		&lt;div&gt;&lt;input type="submit" value="Send Image" /&gt;&lt;/div&gt;
  	&lt;/form&gt;
  	
  	

&lt;%
    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    if (user != null) {
%&gt;
		<p>Hello, &lt;%= user.getNickname() %&gt;! (You can
		<a >sign out</a>.)</p>
&lt;%
    } else {
%&gt;
		<p>Hello!
		<a >Sign in</a>
		to include your name with greetings you post.</p>
&lt;%
    }
    
	PersistenceManager pm = PMF.get().getPersistenceManager();
	String query = &quot;select from &quot; + Greeting.class.getName() + &quot; order by date desc range 0,5&quot;;
	List&lt;Greeting&gt; gs = (List&lt;Greeting&gt;) pm.newQuery(query).execute();
	if(gs.isEmpty()){
%&gt;

	<p>Have no messages in Guestbook.</p>

&lt;%	}
	else{
		for(Greeting g: gs){
			if(g.getAuthor() == null){
%&gt;
&lt;div align="center"&gt;
	<p>An anonimus wrote:</p>
&lt;/div&gt;

&lt;%
            }
            else {
%&gt;
&lt;div align="center"&gt;
	<p><b>&lt;%= g.getAuthor().getNickname() %&gt;</b> wrote:</p>
&lt;/div&gt;
&lt;%
            }
%&gt;
&lt;div align="center"&gt;
	<p>At time: &lt;%= g.getDate() %&gt;</p>
	&lt;blockquote&gt; Message: &lt;%= g.getContent() %&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;%
        }
    }
    pm.close();
%&gt;			
	
  &lt;/body&gt;
&lt;/html&gt;
rodrigo.manfre

Cara, seu input está não errado, não sei se é isso, mas é um erro:
Troque isso: <input type=“file” name=“greetingImage” value=“img” name=“img”>
Por isso: <input type=“file” name=“greetingImage” name=“img”>

Você está passando o valor img na propriedade value, assim o valor não vai mesmo, e o nome do atributo que vc tem que recuperar na tua servlet é a propriedade name do input ou seja greetingImage, vc está recuperando img, tenta ai

Att

Criado 14 de setembro de 2011
Ultima resposta 16 de set. de 2011
Respostas 7
Participantes 2