8

ファイルとそのプロパティを GWT サーバーに送信する必要があります。

ファイルを送信するには、フォームパネルを使用しました。

 public class BrowseFile extends DialogBox {
   // more code
   // ..

        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.addSubmitHandler(new FormPanel.SubmitHandler(){
                        public void onSubmit(SubmitEvent event) {
                            // TODO Auto-generated method stub
                                    setFilename(fileUpload.getFilename());
                        }

                    });
                }
                return formPanel;
            }
        }   

このファイルのすべてのプロパティは Hashmap にあります ドキュメントを追加するGUI

2 つのダイアログ ボックスがPropertybox extends DialogBoxあり、

BrowseFile extends DialogBox

PropertyBox のコンストラクター内に BrowseFile があります

PropertyBox コンストラクターの場合

                setSize("600px", "670px");
    setHTML("Add Document");

    setWidget(getVerticalPanel());
    browseFile = new BrowseFile();

PropertyBox 内のカスタム プロパティは、選択したクラスによって異なります (クラスはツリー ウィジェットです)。

サーバー側

public class FileUpload extends HttpServlet implements Servlet{

    private static final long serialVersionUID = 1L;
    private static final Logger log = Logger.getLogger(FileUpload.class
            .getName());
    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;

        try {

            ServletFileUpload upload = new ServletFileUpload();

            FileItemIterator iterator = upload.getItemIterator(request);
            while (iterator.hasNext()) {
                FileItemStream item = iterator.next();
                 stream = item.openStream();

                if (item.isFormField()) {
        //                                                                      
                } else {

                    fileName = item.getName();
                    mimetype = item.getContentType();

//                                      
                }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        int len;

        while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
            output.write(buffer, 0, len);
        }
        ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
        Session session =RootFolder.getSession();
        ContentStream contentStream = session.getObjectFactory()
                .createContentStream(fileName, output.size(), mimetype, input);


}

外部リポジトリでドキュメントを作成するには、hasmap にドキュメント プロパティが必要です

folder.createDocument(Document プロパティ,contentStream, VersioningState.MAJOR);

onClickDocument プロパティ クラスのイベントでButton ADD、Document プロパティをこのクラスに送信する必要があります。

*****クラス FileUpload でこのドキュメント プロパティをサーバーに送信する方法 *****

4

2 に答える 2

8

まず第一に、GWTUploader コンポーネントを使用することをお勧めします。これにより、作業が大幅に楽になります。

http://code.google.com/p/gwtupload/

次に、ハッシュマップ (キー/値) をフォーム フィールドとして追加する必要があります。

http://code.google.com/p/gwtupload/issues/detail?id=8

説明した方法と同様に、サーバー側コンポーネントのフォーム フィールドを取得するだけです。

            if (item.isFormField()) {
    //                                                                      
            } else {

次のようになります。

            if (item.isFormField()) {
               paramsMap.add(item.getName(), item.getValue())
            } else {
于 2012-08-24T12:16:54.977 に答える
1

一連のリクエストを使用しないのはなぜですか?

  1. クライアント:ファイルをアップロードします。FormPanelを使用します。
    サーバー:ファイルを保存し、新しいfileIdを返します(成功した場合)

  2. クライアント:(onSubmitCompletedから)ファイルのデータをそのfileIdと一緒に送信します。必要なデータ構造を使用
    します。サーバー:ファイル情報フィールドをDBに格納します。

于 2012-08-24T21:30:55.420 に答える