2

こんにちは、あらゆる種類のファイルをホストできるアプリケーションを作成しようとしています。それを行うために、私は次の魔法を実行しています:

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
    @ResponseBody
    public FileSystemResource 
    getFile(
            @PathVariable("file_name") String fileName) {
        System.out.println(fileName);
        String filePath = "./files/";
        return new FileSystemResource(new File(filePath+fileName)); 
    }

しかし、このアプローチには 3 つの望ましくない問題があります。

  1. いくつかのランダム データがファイルに追加されています

  2. ファイルはダウンロードされる代わりにブラウザウィンドウで開かれます - 私はこれを次のようなものを使ってハックしようとしました

    プロデュース = 「アプリケーション/オクテット ストリーム」

    しかし、それは406エラーだけになりました。

  3. test.txt は test に切り詰められています。アプリに test.txt/ を fileName として提供する際の回避策を見つけましたが、少し乱雑に見えます。

4

2 に答える 2

1

スプリングマニュアルに記載されているように

@RequestBody と同様に、Spring は返されたオブジェクトを HttpMessageConverter を使用して応答本文に変換します。

あなたの問題は、春には FileSystemResource を処理できる HttpMessageConverter が付属していないことだと思います。

組み込みの HttpMessageConverter のリストは、こちらから入手できます。何らかの方法で応答をバイト配列に変換してみることをお勧めします。代わりに ByteArrayHttpMessageConverter を選択し、問題の解決に役立つかもしれません

于 2013-01-23T00:18:18.040 に答える
0

このようなコードを使用して画像を返しました

@RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
public String getImage(... HttpServletResponse response) {
      response.setContentType(image/png);
      (response.getOutputStream()).write(imageByteArray);
}

適切な MIME タイプを定義し、データを応答に送信する必要があると思います。

于 2013-01-23T06:51:52.300 に答える