0

ファイルをサーバーにアップロードする際に問題があります。私はこのチュートリアルを使用しました: http://code.google.com/p/gwtupload/wiki/GwtUpload_GettingStartedとすべてうまくいきましたが、ファイルを選択すると進行状況バーに進行状況が表示されず、Eclipse で次のようになります:

[警告] 着信 RPC 呼び出し javax.servlet.ServletException のディスパッチ中の例外: Content-Type was 'multipart/form-data; 境界=----webkitformboundaryfafzb7tzbpq9rkjl'. 「text/x-gwt-rpc」が必要です。com.google.gwt.user.server.rpc.RPCServletUtils.checkContentTypeIgnoreCase(RPCServletUtils.java:476) で ....

GWT の HelloWorld 初期プロジェクトの上にチュートリアルのコードを追加し始めました。

これは私の web.xml ファイルです

<context-param>
    <!-- max size of the upload request -->
    <param-name>maxSize</param-name>
    <param-value>3145728</param-value>
</context-param>
<context-param>
    <!-- Useful in development mode to slow down the uploads in fast networks. 
        Put the number of milliseconds to sleep in each block received in the server. 
        false or 0, means don't use slow uploads -->
    <param-name>slowUploads</param-name>
    <param-value>200</param-value>
</context-param>

<!-- Servlets -->
<servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>webapp.server.GreetingServiceImpl</servlet-class>

    <servlet-name>uploadServlet</servlet-name>
    <!-- This is the default servlet, it puts files in session -->
    <servlet-class>webapp.server.CustomizedUploadServlet</servlet-class>

</servlet>

<servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/singlefileuploadsample/greet</url-pattern>

    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>*.gupld</url-pattern>

    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>/upload</url-pattern>

</servlet-mapping>

<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>SingleFileUploadSample.html</welcome-file>
</welcome-file-list>

サーブレットについては、新しいクラスを作成し、そこにコードを追加しました。コンテンツ タイプに関連するものがありますが、この問題を解決する方法がわかりません。

アップデート:

これは、プロジェクトを Jetty にデプロイしようとしたときに Eclipse でのみ発生します。Tomcat に war ファイルとして展開されると、完全に正常に動作します。

4

4 に答える 4

0

ファイルのアップロードにgwtuploadを使用します

import gwtupload.server.UploadAction;
import gwtupload.server.exceptions.UploadActionException;

import java.io.File;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;

public class CWTUploadServlet extends UploadAction {

  private static final long serialVersionUID = 1L;

  Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>();
  /**
   * Maintain a list with received files and their content types. 
   */
  Hashtable<String, File> receivedFiles = new Hashtable<String, File>();

  /**
   * Override executeAction to save the received files in a custom place
   * and delete this items from session.  
   */
  @Override
  public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException {
    String response = "";
    int cont = 0;
    for (FileItem item : sessionFiles) {
      if (false == item.isFormField()) {
        cont++;
        try {

           //Create a new file based on the remote file name in the client
           String saveName = item.getName().replaceAll("[\\\\/><\\|\\s\"'{}()\\[\\]]+", "_");
           System.out.println("Save name : "+saveName);
           File file =new File("/Users/Spirit/hob/" + saveName);

          item.write(file);
          /// Save a list with the received files
          receivedFiles.put(item.getFieldName(), file);
          receivedContentTypes.put(item.getFieldName(), item.getContentType());

          /// Compose a xml message with the full file information
          response += "<file-" + cont + "-field>" + item.getFieldName() + "</file-" + cont + "-field>\n";
          response += "<file-" + cont + "-name>" + item.getName() + "</file-" + cont + "-name>\n";
          response += "<file-" + cont + "-size>" + item.getSize() + "</file-" + cont + "-size>\n";
          response += "<file-" + cont + "-type>" + item.getContentType() + "</file-" + cont + "type>\n";
        } catch (Exception e) {
          throw new UploadActionException(e);
        }
      }
    }

    /// Remove files from session because we have a copy of them
    removeSessionFileItems(request);

    /// Send information of the received files to the client.
    return "<response>\n" + response + "</response>\n";
  }

そしてあなたのweb.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <display-name>CWTMVP</display-name>

    <!-- Default page to serve -->
    <welcome-file-list>
        <welcome-file>CWTMVP.html</welcome-file>
    </welcome-file-list>

    <!--
        This Guice listener hijacks all further filters and servlets. Extra
        filters and servlets have to be configured in your
        ServletModule#configureServlets() by calling
        serve(String).with(Class<? extends HttpServlet>) and
        filter(String).through(Class<? extends Filter)
    -->
    <listener>
        <listener-class>com.db.cawt.clientzonedesign.server.guice.GuiceServletConfig</listener-class>
    </listener>

    <filter>
        <filter-name>guiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>guiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


      <context-param>
        <param-name>maxSize</param-name>
        <param-value>102400000</param-value>
      </context-param>

      <context-param>
        <param-name>slowUploads</param-name>
        <param-value>true</param-value>
      </context-param>

      <servlet>
        <servlet-name>uploadServlet</servlet-name>
        <servlet-class>xxx.yyy.server.CWTUploadServlet</servlet-class>
      </servlet>

      <servlet-mapping>
        <servlet-name>uploadServlet</servlet-name>
        <url-pattern>*.gupld</url-pattern>
      </servlet-mapping>


</web-app>
于 2012-10-30T03:39:41.627 に答える
0

エラー トレースによると、送信したリクエストを受け取ったサーブレットは gwt-rpc サーブレットです。

あなたの web.xml は正しく構成されているようで、そのファイルに従って webapp.server.CustomizedUploadServlet がリクエストを処理したと思われるため、私が見るエラーの唯一の考えられる原因は次のとおりです。

  • あなたの webapp.server.CustomizedUploadServlet は UploadAction の代わりに RPCServlet を拡張しています。
  • または、デプロイが間違っていて、アプリが正しい web.xml を読み取っていません
于 2012-10-30T13:21:35.087 に答える
0

ファイルを含むフォームを RPC サービスにアップロードすることはできません。RPC サーブレットを拡張するサービスは、フォームを受信できず、適切なオブジェクトしか取得できません。

于 2012-10-30T01:04:41.270 に答える
0

mP は正しいです。ファイルを含むフォームを RPC サーブレットに投稿することはできません。したがって、RemoteServiceServlet を拡張する代わりに、javax.servlet.http.HttpServlet を拡張するサーブレットを作成します。この変更を自分で行い(この質問のコードを使用)、ファイルのアップロードに成功しました。

于 2014-11-02T18:07:15.260 に答える