1

他の機能の中でも、ユーザーが画像ファイルをアップロードしてサーバーに保存できるようにする GWT アプリケーションを開発しています。これまでのところ、それは私がやったことです..

サーブレット

public class ImageUploadService extends HttpServlet {

private static final int MAX_FILE_SIZE = 1 * 1024 * 1024;

public void doPost(HttpServletRequest request, HttpServletResponse response) {

    wlog("INFO: è partita la servlet");

    if (!ServletFileUpload.isMultipartContent(request))
        wlog("ERR: non è multipart!");
    ServletFileUpload fileUpld = new ServletFileUpload();

    try {
        wlog("INFO: itero file");
        FileItemIterator fileIt = fileUpld.getItemIterator(request);
        while (fileIt.hasNext()) {

            wlog("INFO: trovato file");
            FileItemStream fileStream = fileIt.next();
            BufferedInputStream in = new BufferedInputStream(
                    fileStream.openStream(), 4096);
            BufferedOutputStream out = new BufferedOutputStream(
                    new FileOutputStream("immagineSegnalazione.jpg"));

            byte[] buf = new byte[MAX_FILE_SIZE];
            int byteRead;
            while ((byteRead = in.read(buf, 0, MAX_FILE_SIZE)) >= 0) {
                out.write(buf, 0, byteRead);
            }
            in.close();
            out.flush();
            out.close();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void wlog(String s) {
    System.out.println("UPLOAD SERVLET " + s);
}
}

クライアント側のモジュール

            [...]

        PopupPanel inserisciSegnalazionePopup = new PopupPanel();
    final FormPanel uploadForm = new FormPanel();
    uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
    uploadForm.setMethod(FormPanel.METHOD_POST);
    inserisciSegnalazionePopup.setAutoHideEnabled(true);
    VerticalPanel holder = new VerticalPanel();
    holder.add(new Label("se puoi, allega una foto della segnalazione"));
    final FileUpload fu = new FileUpload();
    uploadForm.add(fu);
    holder.add(uploadForm);
    uploadForm.setAction(GWT.getModuleBaseURL() + "imageUpload");
    Button inviaBtn = new Button("INVIA SEGNALAZIONE");
    inviaBtn.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            // TODO check file is image and size and other stuff


            uploadForm.submit();
        }

    });
    holder.add(inviaBtn);

            [...]

..さらに、web.xml で必要な変更を正しく行いました。サーブレットが正しく呼び出され、メソッド doPost() が開始されますが、FileItemIterator は、あたかもファイルがまったくないかのように、常に空です。 ? どこが間違っているのかよくわかりませんよろしくお願いします

4

3 に答える 3

1

解決策は... .setName() を FileUpload ウィジェットに追加するだけです

于 2013-08-20T12:01:22.320 に答える
1

あなたがそれを使用する前に、リクエストはどこかで解析されると思います。その質問とその回答を見てみると、ほぼ同じ問題だったようです。

サラジョグ

于 2013-08-19T12:12:09.727 に答える