1

クライアントからサーバーにファイルを送信したい。

私のコード:

クライアント側

private FormPanel getFormPanel() {
    if (formPanel == null) {
        formPanel = new FormPanel();
    formPanel.setMethod(FormPanel.METHOD_POST);
        formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
        formPanel.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet");
        formPanel.setWidget(getFlexTable_1());

                System.out.println(GWT.getHostPageBaseURL() +"UploadFileServlet");
    }
    return formPanel;
}

getFlexTable_1()

flexTable.setWidget(1, 1, getFileUpload());

getFileUpload()

private FileUpload getFileUpload() {
    if (fileUpload == null) {
        fileUpload = new FileUpload();
        fileUpload.setName("upload");
    }
    return fileUpload;
}

private Button getAddButton() {
        if (addButton == null) {
            addButton = new Button("ADD");
            addButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                               formPanel.submit();
        }
        });
    }
return addButton;

}

サーバー側

public class CmisFileUpload extends HttpServlet implements Servlet{

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        byte[] buffer = new byte[115200];//
        String fileName = null;
        String mimetype = null;
        String majorVersion = null;
        InputStream stream = null;
        System.out.println("ServletWorking Fine");
}

ファイルを選択して[追加]ボタンをクリックすると、このコードのサーバー側の出力が表示されません。System.out.println("ServletWorking Fine");

クライアントSystem.out.println(GWT.getHostPageBaseURL() +"UploadFileServlet");側の出力は

http://127.0.0.1:8888/UploadFileServlet

このURLをブラウザで直接使用すると、System.out.println("ServletWorking Fine");**のサーバー側の出力が得られます。


編集済み

ファイルアップロード用のWebアプリケーションをもう1つ作成しました

public class Uploadfile implements EntryPoint {

    FormPanel uploadForm = new FormPanel();
    public void onModuleLoad() {

        HorizontalPanel horizontalPanel = new HorizontalPanel();

      uploadForm.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet"); 

        uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART); 
        uploadForm.setMethod(FormPanel.METHOD_POST); 
        horizontalPanel.add(uploadForm);

        // Create a panel to hold all of the form widgets. 
        VerticalPanel panel = new VerticalPanel(); 
        uploadForm.setWidget(panel); 

        FlexTable flexTable = new FlexTable();
        panel.add(flexTable);

        // Create a FileUpload widget. 
        FileUpload upload = new FileUpload(); 
        upload.setName("uploadFormElement"); 
        flexTable.setWidget(2, 3, upload);
        // panel.add(upload); 

        // Add a 'submit' button. 
        Button uploadSubmitButton = new Button("Submit"); 
        panel.add(uploadSubmitButton); 

        uploadSubmitButton.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                // TODO Auto-generated method stub
                 uploadForm.submit(); 
            }
        });
        uploadForm.addFormHandler(new FormHandler() { 
          public void onSubmit(FormSubmitEvent event) { 
          } 
          public void onSubmitComplete(FormSubmitCompleteEvent event) { 
            Window.alert(event.getResults()); 
          } 
        }); 
        RootPanel.get().add(horizontalPanel); 
    }
}

サーバ

protected void doGet(HttpServletRequest request, 
            HttpServletResponse response) 
                            throws ServletException, IOException { 
      doPost(request, response);
  }

  protected void doPost(HttpServletRequest request, 
            HttpServletResponse response) 
                            throws ServletException, IOException { 

      System.out.println("working fine" );
   }

このコードは正常に機能しています

私によると、コード間に違いはありません。

Plzは、formpanel.submitが正しく機能しない理由を教えてくれます。

Plzヘルプ。

4

2 に答える 2

5

メソッドはhide()ウィンドウを閉じていますか?はいの場合

hide();後に移動コードを削除するformPanel.submit();

hide()使用するためFormHandler。例えば

uploadForm.addFormHandler(new FormHandler() {

    public void onSubmitComplete(FormSubmitCompleteEvent event) {
        hide();
    }

    public void onSubmit(FormSubmitEvent event) {

    }

});

理由:FormPanelを切り離してはなりません(つまり、送信が完了するまで親から削除してください。そうしないと、送信の通知が失敗します。

于 2012-08-23T15:56:48.457 に答える
0

ファイルアップロード用にGETメソッドをマッピングした理由。GETリクエストメソッドは、ブラウザに入力されたURLに対応しています。GETリクエストマップを削除すると、機能します。

POSTリクエストマップの場合、以下のようにRequestParamにMultipartFileを使用できます。

protected void uploadFileAndReconcilePayout1(@RequestParam("documentUpload") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //code for file working

    }
于 2012-08-23T05:30:54.540 に答える