1

こんにちは、リストをパラメーターとして渡すことで、サーバーからファイルをダウンロードできますか?

RestyGWTJersey 1.7で?

サーバー側には、次のWebサービスがあります

@POST
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/download")
public Response downloadFiles(@Context HttpServletResponse response, List<FileInfo> files) {
    ZipFile zip = null;

    String uuid = UUID.randomUUID().toString();
    response.setHeader("Content-Disposition", "attachment; filename="
            + uuid + ".zip");
    try {
        zip = new ZipFile(response.getOutputStream());
        File f = new File(ConfigurationLoader.getRealPath("/logo.png"));
        zip.addFile(f, "");
        zip.getOutputStream().flush();
        zip.getOutputStream().close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

ブラウザにlocalhost:8080/Url/downloadと入力すると動作しますが、Resty Gwt または Window.open() 経由でファイルをダウンロードするにはどうすればよいですか?

GET ではなくPOSTを使用したいので、シリアライズ可能なオブジェクトのリストを渡すことができます (例: List files ) 。

クライアント側で RestyGWT を試してみました:

@POST
@Produces("application/zip")
@Path("/download")
public void downloadFiles(List<FileInfo> files, MethodCallback<Response> response);

private static final Resource resource = new Resource(
                GWT.getHostPageBaseURL() + "rest/files");

        public static final FileRestService get() {
            if (instance == null) {
                instance = GWT.create(FileRestService.class);
                ((RestServiceProxy) instance).setResource(resource);
            }
            return instance;
        }

しかし、うまくいかず、restygwtでファイルをダウンロードする例が見つかりません

4

1 に答える 1

2

一般に(*) ajax を使用してファイルをダウンロードすることはできないため、 aWindow.open()または aniframeを使用してユーザーにファイルを保存するように依頼する必要があります。

このクエリでの私の応答を見てください: Window.open in GWT not open correctly with in a call back function

もちろん、iframe を使用して POST を使用することはできませんが、ループをコーディングして、最後の iframe が読み込まれるたびに別のファイルを要求することができます。ユーザーは、ファイルをダウンロードする回数だけ尋ねられます。

FormPanelただし、隠しパラメータを追加してサーバーに POST することもできます。FormPanel は非表示の iframe に応答を表示するため、適切なヘッダー (content-type content-disposition) を設定すると、ファイルをダウンロードして、ユーザーに名前を付けて保存するように求めることができます。より多くの OS が圧縮ファイルを視覚化するユーティリティを備えているため、ユーザーがコンテンツを保存または開くことができるように、ファイルのセットを圧縮します。

(*) XHR を使用するとファイルをダウンロードできますが、コンテンツを処理してユーザーに表示する方法が必要です。通常、html、txt、xml などのテキスト ファイルに使用されます。バイナリ データを受信して​​処理するには、 html5 APIを参照してください。ただし、ユーザーのファイルシステムにファイルを作成することはできません。

于 2013-07-18T16:45:04.980 に答える