SORU
10 Temmuz 2009, Cuma


GWT temel Dosya upload

Bir dosya FileUpload widget GWTs kullanarak yüklemek için nasıl anlamaya çalışıyorum. Java GWT ve Google AppEngine kullanıyorum ama kendi Linux sunucuya dosya upload etmek istiyorum. Aşağıdaki kodu var zaten ama şimdi Google AppServer sunucuya dosya göndermek ve başka bir sunucuya kaydetmek için nasıl çözemiyorum:

public class FileUploader{

    private ControlPanel cp;
    private FormPanel form = new FormPanel();
    private FileUpload fu =  new FileUpload();

    public FileUploader(ControlPanel cp) {
    	this.cp = cp;
    	this.cp.setPrimaryArea(getFileUploaderWidget());
    }

    @SuppressWarnings("deprecation")
    public Widget getFileUploaderWidget() {
    	form.setEncoding(FormPanel.ENCODING_MULTIPART);
    	form.setMethod(FormPanel.METHOD_POST);
    	// form.setAction(/* WHAT SHOULD I PUT HERE */);

    	VerticalPanel holder = new VerticalPanel();

    	fu.setName("upload");
    	holder.add(fu);
    	holder.add(new Button("Submit", new ClickHandler() {
    		public void onClick(ClickEvent event) {
    			GWT.log("You selected: "   fu.getFilename(), null);
    			form.submit();
    		}
    	}));

    	form.addSubmitHandler(new FormPanel.SubmitHandler() {
    		public void onSubmit(SubmitEvent event) {
    			if (!"".equalsIgnoreCase(fu.getFilename())) {
    				GWT.log("UPLOADING FILE????", null);
                                        // NOW WHAT????
    			}
    			else{
    				event.cancel(); // cancel the event
    			}

    		}
    	});

    	form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
    		public void onSubmitComplete(SubmitCompleteEvent event) {
    			Window.alert(event.getResults());
    		}
    	});

    	form.add(holder);

    	return form;
    }
}

Şimdi, ben bir sonraki ne yapmalıyım? Ben web.xml koymak için ne yapmam lazım ve nasıl dosya depolamak ve bu nesnenin url (mümkünse) iade edebilirim o yüzden benim sunucu uygulaması yazmanın ne anlamı var

CEVAP
10 Temmuz 2009, Cuma


İşte benim app kodu:

1) bir sınıf http isteğini kabul etmek için hazırladım:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileItemIterator; 
import org.apache.commons.fileupload.FileItemStream; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

public class FileUpload extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
        ServletFileUpload upload = new ServletFileUpload();

        try{
            FileItemIterator iter = upload.getItemIterator(request);

            while (iter.hasNext()) {
                FileItemStream item = iter.next();

                String name = item.getFieldName();
                InputStream stream = item.openStream();


                // Process the input stream
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                int len;
                byte[] buffer = new byte[8192];
                while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
                    out.write(buffer, 0, len);
                }

                int maxFileSize = 10*(1024*1024); //10 megs max 
                if (out.size() > maxFileSize) { 
                    throw new RuntimeException("File is > than "   maxFileSize);
                }
            }
        }
        catch(Exception e){
            throw new RuntimeException(e);
        }

    }
}

2) Sonra benim web.xml bu satırları ekledim:

<servlet>
    <servlet-name>fileUploaderServlet</servlet-name>
    <servlet-class>com.testapp.server.FileUpload</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>fileUploaderServlet</servlet-name>
  <url-pattern>/testapp/fileupload</url-pattern>
</servlet-mapping>

3) Ve form için.eylem mi bu:

form.setAction(GWT.getModuleBaseURL() "fileupload");

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • TechXCentral

    TechXCentral

    12 Temmuz 2011