我有一个网络服务,用户可以使用该服务下载文件(docx或pdf文件)。这段代码代表了它:
@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();
}
另一方面,我使用简单的HTML + JS编写了一个客户端,使用类似这样的jQuery 3 raw ajax调用:
$(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"*/
});
});
...
当我注释掉与编码相关的代码行时,没有任何变化。显然,当我提供文件进行下载时,文件已损坏(文件为25KB,实际上为17KB)。
我已经在Soap UI中尝试过了,不知道为什么,我得到了不同的输出:
我的问题是我在ajax电话中做错了什么?我得到的数据似乎是二进制的,但我不知道为什么它与Soap UI相比在浏览器中有所不同。
答案 0 :(得分:0)