最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to download a file using window.open() - Stack Overflow

programmeradmin3浏览0评论

I am trying to download a file from server using window.open(path,'_blank','download') but it just opens it in a new tab. How do I download the file? Yes I did check for other similar question but none of them work. Also I've tried this but it didn't work.

$scope.docView = function () {     
    Method.getbyId("api call",docId).then(function(response) {                
        }).catch(function (data) {
            console.log("Unknown Error");
        });
    }
}

/*this.getbyId = function (path, id) {
            return $http.get(appSetting.apiBaseUrl + path + "/" + id);
        };
*/




[Route("api call")]
    [HttpGet]
    public IHttpActionResult ViewDocument (Guid? docId)
    {
          /*background work*/            

            response.Message = filePath;
            var bytes=System.IO.File.ReadAllBytes(prevPath);                
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ContentType = value.Format;
            string Name = value.DocumentName;
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + Name);               
            HttpContext.Current.Response.BinaryWrite(bytes);
            }                
        }
        catch (Exception ex)
        {
            Utils.Write(ex);
        }

        return Ok(response);
    }

I am trying to download a file from server using window.open(path,'_blank','download') but it just opens it in a new tab. How do I download the file? Yes I did check for other similar question but none of them work. Also I've tried this but it didn't work.

$scope.docView = function () {     
    Method.getbyId("api call",docId).then(function(response) {                
        }).catch(function (data) {
            console.log("Unknown Error");
        });
    }
}

/*this.getbyId = function (path, id) {
            return $http.get(appSetting.apiBaseUrl + path + "/" + id);
        };
*/




[Route("api call")]
    [HttpGet]
    public IHttpActionResult ViewDocument (Guid? docId)
    {
          /*background work*/            

            response.Message = filePath;
            var bytes=System.IO.File.ReadAllBytes(prevPath);                
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ContentType = value.Format;
            string Name = value.DocumentName;
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + Name);               
            HttpContext.Current.Response.BinaryWrite(bytes);
            }                
        }
        catch (Exception ex)
        {
            Utils.Write(ex);
        }

        return Ok(response);
    }
Share Improve this question edited Mar 2, 2018 at 10:11 Shalini Raj asked Mar 2, 2018 at 8:46 Shalini RajShalini Raj 3071 gold badge3 silver badges22 bronze badges 5
  • Code please.... – Luke Commented Mar 2, 2018 at 9:02
  • 1 In your question yesterday (in the ments) stackoverflow./questions/49045557/… you asked for the exact opposite of this...""The problem is I should not download the file, it should just popup in a new tab in the browser ". Have you changed your mind? But as I already explained, there is only a limited extent to which this is in your control, some of it is to do with the browser. You can try to affect it with the headers as per the answer below but that's about all you can do. – ADyson Commented Mar 2, 2018 at 9:13
  • yes actually now i just have to download the file. it should actually e as a download. – Shalini Raj Commented Mar 2, 2018 at 9:19
  • Possible duplicate of Is it possible to initiate a download prompt in browser for recognized mime-types using only JavaScript (client-side approach)? – Liam Commented Mar 2, 2018 at 10:01
  • Actually i cannot use Download cz I'm using this button inside syncfusion grid which will go to jsrender . from there a function is called which will click a hidden button to go to angularJS controller. in any case i cant use that. – Shalini Raj Commented Mar 2, 2018 at 10:19
Add a ment  | 

1 Answer 1

Reset to default 2

To force the browser to download the file (instead of displaying it, in another tab or the current one) requires a special header to be sent along with the file body.

That's only possible if you can modify some things server-side.

You should send following headers :

  • Content-Disposition: attachment; filename"myfile.txt"
  • Content-Type: application/octet-stream; name="myfile.txt"
  • Content-Transfer-Encoding: binary

Of course, replace application/octet-stream by the content-type of your file, if known (application/pdf, image/jpeg, etc.)

发布评论

评论列表(0)

  1. 暂无评论