2016-08-09 7 views
0

私は、ユーザーがファイル(docxまたはpdfファイル)をダウンロードできるWebサービスを持っています。コードのこの作品は、それを表す:jerseyとAjaxを使用してJerseyからファイルを取得する

他の側では
@GET 
@Path("explicacionOperador/explicacion_operador_ticket_{id_ticket}.pdf") 
@Produces("application/pdf") 
public Response generarDocumentoExplicacionOperadorPostPdf(
    @PathParam("id_ticket") String pTicketId, 
    @HeaderParam("nombre_apellidos") String nombre_apellidos, 
    @HeaderParam("domicilio") String domicilio, 
    @HeaderParam("codigo_postal") String codigo_postal, 
    @HeaderParam("localidad") String localidad, 
    @HeaderParam("provincia") String provincia, 
    @HeaderParam("linea") String linea, 
    @HeaderParam("operador") String operador, 
    @HeaderParam("mensaje") String mensaje 
) throws IOException, ConfigurationException, URISyntaxException, FormatoNoSoportadoException{ 
    ETipoDocumento tipo = FormatoNoSoportadoException.testFormato("pdf"); 
    File documentoExplicacionOperador = this.generalService.getDocumentoExplicacionOperador(
      tipo, 
      pTicketId, 
      nombre_apellidos, 
      domicilio, 
      codigo_postal, 
      localidad, 
      provincia, 
      linea, 
      operador, 
      mensaje); 
    return Response 
      .ok(documentoExplicacionOperador, MediaType.APPLICATION_OCTET_STREAM) 
      .header("Content-Disposition", "attachment; filename=\"" + documentoExplicacionOperador.getName() + "\"") 
      .header("Charset", "ISO-8859-1") 
      .build(); 
} 

、私はこの1つのようなjQueryの3生のAJAX呼び出しを使用して、プレーンなHTML + JSで記述されたクライアントを持っている:

$(document).ready(function(e){ 

      $("#dale").click(function(e){ 
       e.preventDefault(); 
       var tgt = "resources/documentos/explicacionOperador/explicacion_operador_ticket_666.docx"; 
       $.ajax({ 
        url: tgt, 
        type: 'GET', 
        //mimeType: "application/octet-stream", 
        //contentType: 'application/octet-stream; charset=ISO-8859-1', 
        //async: true, 
        processData: false, 
        success: //download.bind(true, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "explicacion_operador_ticket_666.docx"), 
         function(data){ 
          console.log(data); 
         }, 
        error: function(data){ 
         var elError = "Error al hacer la llamada a " + tgt + ": " + data; 
         console.log(elError); 
         console.log(data); 
         alert(elError); 
        }, 
        headers: { 
         nombre_apellidos: "Mike Poborsky", 
         domicilio: "St. Mary 4", 
         codigo_postal: "194", 
         localidad: "Julapa", 
         provincia: "Asada", 
         linea: "SB64533", 
         operador: "Julandrin", 
         mensaje: "Recarga no funciona" 
        }/*, 
        scriptCharset: "ISO-8859-1"*/ 
       }); 
      }); 
      ... 

このようなメッセージがコンソール内に表示されます。 characters

エンコーディングに関連するコード行をコメントアウトすると、何も変わりません。明らかに、私がダウンロードするファイルを提供するとき、ファイルは壊れています(ファイルは実際に17KBのときに25KBです)。

私は石鹸UIでそれを試してみました、私は別の出力を取得し、なぜ知っていませんでした: soap ui response

私の質問は、私は私のAJAX呼び出しで何か間違ったことをやっているのですか?私が得たデータはバイナリであるようですが、Soap UIと比較してブラウザが違う理由はわかりません。

答えて

0

私は自分自身で答えを見つけました。遅延のために、私はAjaxリクエストを実装するための他の方法を探しました。そのため、生のXMLHttpRequestを使用することにしました...そして、それはうまくいったのです!ファイルをダウンロードするには、download.jsライブラリを使用しました。

は、単に次のように:

var oReq = new XMLHttpRequest(); 
oReq.open("GET", tgt, true); 
oReq.setRequestHeader("nombre_apellidos", "Mike Poborsky"); 
oReq.setRequestHeader("domicilio", "St. Mary 4"); 
oReq.setRequestHeader("codigo_postal", "123"); 
oReq.setRequestHeader("localidad", "Julapa"); 
oReq.setRequestHeader("provincia", "Asada"); 
oReq.setRequestHeader("linea", "SBD0345"); 
oReq.setRequestHeader("operador", "Yay"); 
oReq.setRequestHeader("mensaje", "Recarga no funciona"); 
oReq.responseType = "blob"; 
oReq.onload = function(oEvent) { 
    download(oReq.response, "explicacion_operador_ticket_666.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 
}; 
oReq.send(); 
関連する問題