Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果';内容配置';使用jQuery/javascript ajax在响应中找到_Javascript_Jquery_Ajax_Rest_Content Disposition - Fatal编程技术网

如果';内容配置';使用jQuery/javascript ajax在响应中找到

如果';内容配置';使用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

我有一个用于文件下载的rest web服务, 服务转到validationfilter并在生成响应之前验证用户

这是我的rest服务响应生成器

@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增加了更多开销…)