2

ステートレス モバイル アプリでは、モバイル クライアントから、Spring MVC ベースの Web レイヤーを公開するサーバーに画像ファイルをアップロードする必要があります (後で、この画像に対して OCR プロセスを実行する必要がありますが、現時点では関係ありません)。 .

私が見たすべての春の MVC ファイル アップロードの例は、modelAndView の存在を前提としているため、私のニーズに合わないMultipartFilesに基づいていますが、私のサーバーはステートレスであり、モデルやビューも HTTP セッションも使用せず、純粋でシンプルな JSON 形式の安静なリクエスト。

これを行う最善の方法は何だろうか?

今のところ、画像を文字列としてサーバーに送信するテストを作成しました (base64 エンコーディングを使用)。何かのようなもの:

ClassPathResource myFile= new ClassPathResource("imageName.jpg");
byte[] fileByteArray = Files.readAllBytes(myFile.getFile().toPath());
String imageAsString = Base64.encodeBase64URLSafeString(fileByteArray);

今、この imageAsString をコントローラに送信しています。私のコントローラーでは、次のようなものを使用して、この文字列をデコードしてバイト配列に戻すことができます。

public static byte[] decodeFile(String fileDataString) {
return Base64.decodeBase64(fileDataString);
}

そのため、私のサーバーでは現在、生データであるバイト配列を保持していますが、FileOutputStream に書き込む以外に、それで何かできるかどうかはわかりません。サーバーに画像をアップロードするための良い方法を誰かが推奨できますか?

4

2 に答える 2

1

以下に示すmodelandviewを使用せずに、MultipartFileを使用してこれを行うことができます。

@RequestMapping(value="/rest/files", method=RequestMethod.POST,consumes="multipart/form-data", produces="application/json")
@ResponseBody()
public String uploadFile(@RequestParam("file") MultipartFile file) {
    try {
        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
            return  "{\"success\": true}";
        } else {
            return  "{\"success\": false}";
        }
    } catch (Exception ex) {
        return  "{\"success\": false}";
    }
    return  "{\"success\": false}";
}
于 2012-12-27T18:34:28.900 に答える
0

MultipartFile を Spring MVC Web レイヤーにアップロードするには複数の変更 (サーブレット コンテキストの変更、メッセージ コンバーターの変更、コントローラーの調整など) が必要であり、このプロセスの完全で簡単なチュートリアルが見つからなかったため、ファイル (画像) をアップロードするだけにしました。 ) Base64 でエンコードされた文字列として。これを行うには、ファイルを文字列にエンコードし、decodeBase64 を使用して元のファイル コンテンツにデコードできるencodeBase64URLSafeStringメソッドを提供する org.apache.commons.codec.binary.Base64 を使用しました。このようにして、途中でデータを失うことはなく、複雑な変更を回避しています。この方法の欠点は、クライアントがencodeBase64URLSafeStringとまったく同じ方法でファイルをエンコードする必要があることです。メソッドはそうするので、最適ではないことは確かです..

于 2013-01-02T12:53:45.827 に答える