4

クライアント側でGWTを使用してPOSTリクエストでxmlファイルを文字列+画像として送信するための多くのアプローチをすでに試しました。文字列は正常に送信できますが、RequestBuilder を使用してファイル (写真) を送信する方法がわかりません。文字列を送信することしかできません。

GWT クライアント (RequestBuilder) を使用して multipart/form-data POST リクエストでファイルを送信する方法を知っている人はいますか?

PS: ファイルをアップロードしたくないので、アップローダーなどは必要ありません。Phonegap を使用してモバイル アプリを開発し、POST 要求ごとにサーバー (サード パーティ サービス) に送信する必要がある写真を作成しています。

前もって感謝します!

ここにいくつかのコード:

public void sendPost() throws RequestException {
        String boundary = createBoundary();
        String xml = "<note> <to>Müller</to> <from>Jani</from> <heading>Erinnerung</heading> <body>Ich wohne in der Leipzigerstraße</body> </note>";
        String requestData = getRequestData(boundary, xml);



    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "http://localhost:8080/xxx/yyy");
    builder.setHeader("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary);
    builder.setHeader("Content-Length", Long.toString(requestData.length()));
    try {
      builder.sendRequest(requestData, new RequestCallback() {
        public void onResponseReceived(Request request, Response response) {

        }
        public void onError(Request request, Throwable exception) {
          exception.printStackTrace();
        }
      });
    } catch (RequestException e) {
      e.printStackTrace();
    }

}

private String getRequestData(String boundary, String xml) {
    String s = "";

    s += "--" + boundary + "\r\n";
    s += getRequestParameter("xml", xml + "");
    s += "--" + boundary + "--\r\n"; // end
    return s;
}

private String getRequestParameter(String key, String value) {
    return "Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n"
            + value + "\r\n";
}
private String createBoundary() {
    return "----GoneVerticalBoundary" + getRandomStr() + getRandomStr();
}

private String getRandomStr() {
    return Long.toString(random.nextLong(), 36); //random -> DEFINED IN THE CLASS BODY
}
4

3 に答える 3

1

純粋な gwt ソリューションを探している場合は、FileUploadを使用する必要があります

サードパーティのオープン ソース jar を使用してもかまわない場合は、gwtuploadを試すことができます

ロケールの問題については、UTF-8 と GWT のロケール Cookie とロケール設定を使用していることを確認してください。

于 2012-12-11T17:36:06.517 に答える
1

gwt + phonegap を使用している場合は、gwt-phonegap を使用する必要がありますよね?

私が自分のアプリで行っていることは、デスクトップ バージョンには gwtupload を使用し、モバイルでは phonegap ファイル転送を使用することです。どちらの場合も、サーバー側で gwtupload サーブレットを使用します。

これは gwt-phonegap を使用した私のコードです:

  FileUploadOptions options = new FileUploadOptions();
  options.setFileKey("file");
  options.setFileName("my_file.txt");
  options.setMimeType("text/plain");

  phonegap.getFile().createFileTransfer().upload(
   "file:///my_path/my_file.txt", 
   "http://my-gwtupload-servlet/servlet.gupld", 
   options, 
   new FileUploadCallback() {
    @Override
    public void onSuccess(FileUploadResult result) {
      if (result.getResponseCode() == 200) {
      } else {
      }
    }
    @Override
    public void onFailure(FileTransferError error) {
      Window.alert("Error sending the file, error-code: " + error.getCode());
    }
  });

以下を使用して適切な実装を選択するために、遅延バインディングを使用しphonegap.envます。

<replace-with class="...UploadFilePhoneGap">
  <when-type-is class="....UploadFile" />
  <when-property-is name="phonegap.env" value="yes" />
</replace-with>
于 2012-12-11T23:42:31.080 に答える
0

ファイルや画像をサーバーに送信する前にクライアント側で管理したいすべての人には、Manolo が推奨しているように、lib-gwt-fileをお勧めします。

PhoneGap を使用している場合は、Base64 を使用して画像をエンコードし、サーバー側でデコードすることをお勧めします (クラスBase64Utilを参照) 。

于 2012-12-14T20:55:28.173 に答える