1

クライアント側 (JavaScript) からサーバー側の Jaxrs 実装に img を送信する必要があります。

クライアント側:

function sendRequest()
{
  var url = 'http://localhost:8080/MobilePOC/restService/uploadImage';
  $("body").append('<canvas id="theCanvas" style="display:none" width="300px"  
           height="300px"></canvas>');
  var canvas = document.getElementById('theCanvas');  
  var context = canvas.getContext('2d');
  var imageObj = new Image();
  imageObj.src = "myjpg.jpeg";  
  context.drawImage(imageObj, 0, 0, 300, 300);
  $.post(url, {'image':canvas.toDataURL("image/jpeg"), 'url':'caption'},  
    function(file){               
        //Callback code
        alert("done");
    });
}

そして、私が使用しているJAXRSのサーバー側では:

それは機能しますが、base64文字列を画像に戻すと機能しないという問題があります。元の画像ではなく、空白の画像を作成しています。

    @POST
    @Path("/uploadImage")
    @Consumes(MediaType.WILDCARD)
    public Response upload(String image) {  
        System.out.println("In upload:"+image);

        Base64 decoder = new Base64();
        try {       
           byte[] imgBytes = decoder.decode(image);  
           FileOutputStream osf;
           osf = new FileOutputStream(new File("C:/yourImage.jpg"));
           osf.write(imgBytes);  
           osf.flush();  
           osf.close();
        } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        } 
            // store input somewhere
            return Response.ok().build();   
    }

エンコードされた文字列のいくつかの文字を置き換えようとしましたが、成功しませんでした。

4

4 に答える 4

0

クライアント側とサーバー側でBase64文字列を確認してください。同じでない場合は、違いを見つけてください。

このリンクを確認して、 Base64 文字列が一部のデータを破棄する問題の解決策を見つけてください。

于 2013-09-20T11:16:12.400 に答える
0

base64 '文字列' は、実際には文字列の配列である必要があります。少なくとも、改行で区切られた最大長 76 バイトの複数の行が必要です。これらの行または文字列をそれぞれデコードし、OutputStream に送信します。

于 2012-05-20T17:43:52.073 に答える
0

このコードランチリンクを見てください

クライアント側での jpeg でのエンコードと、サーバー側での jpg へのデコードに問題がある可能性があります。

于 2012-05-20T17:45:29.187 に答える
0

URL_SAFE関数にオプションを指定してみてくださいBase64.decode

于 2012-05-20T18:22:55.530 に答える