如果';内容配置';使用jQuery/javascript ajax在响应中找到
我有一个用于文件下载的rest web服务, 服务转到validationfilter并在生成响应之前验证用户 这是我的rest服务响应生成器如果';内容配置';使用jQuery/javascript ajax在响应中找到,javascript,jquery,ajax,rest,content-disposition,Javascript,Jquery,Ajax,Rest,Content Disposition,我有一个用于文件下载的rest web服务, 服务转到validationfilter并在生成响应之前验证用户 这是我的rest服务响应生成器 @GET @Path("/logfile/{fileName}") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response downloadFile(@PathParam("fileName") String fileName) { //get file content
@GET
@Path("/logfile/{fileName}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(@PathParam("fileName") String fileName)
{
//get file content
ResponseBuilder response = Response.ok((Object) zipFile);
response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getName() + "\"");
return response.build();
}
我正在使用jQueryAjax使用Web服务。使用
通过以上参考,我可以下载我的文件,但当我试图打开文件时,它会出现无效文件错误
。
然后我将代码修改为
$.ajax({
type: "GET",
url: "file downloading url",
contentType: "application/octet-stream",
beforeSend: function(xhr, settings){
xhr.setRequestHeader('auth', 'authparam')
},
success: function(response, status, xhr){
var filename = "";
var disposition = xhr.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1)
{
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
var type = xhr.getResponseHeader('Content-Type');
var blob = new Blob([response], { type: type + '|| mime' });
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, filename);
} else {
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
if (filename) {
var a = document.createElement("a");
if (typeof a.download === 'undefined') {
window.location = downloadUrl;
} else {
a.href = downloadUrl;
a.download = filename;
document.body.appendChild(a);
a.click();
}
} else {
window.location = downloadUrl;
}
setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
此aso出现无效文件错误
但当我使用swagger ui访问webservice时,有效文件被下载 首先,在文本编辑器或十六进制编辑器中打开下载的文件,并检查其实际包含的内容–其中可能有错误消息,可能是服务器输出的。我尝试下载的文件是zip文件。web服务的响应和在文本编辑器中打开的正确zip文件都是相同的。然后尝试十六进制编辑器,只是想确定一下。它可能是一些琐碎的东西,比如意外添加的BOM…
type:type+'| | mime'
?这个“| | mime”
字符串在MIMEType中有什么作用?另外,您的响应是utf-8文本,因此您的二进制数据肯定被破坏了contentType
不设置响应的内容类型,而是设置发送数据的内容类型。您需要执行一个xhr.responseType='blob'
或'arrayBuffer'
请求,这样您的二进制数据就不会损坏。关于如何使用jQuery实现它。。。IMM最好使用原始API(总是发现jQuery为ajax增加了更多开销…)