DenaliHardtail
DenaliHardtail

Reputation: 28336

How do I open a file when clicking an ActionLink?

How do I open an existing file on the server when a user clicks an actionlink? The following code works for downloading a file but I want to open a new browser window, or tab, and display the file contents.

public ActionResult Download()
{
    return File(@"~\Files\output.txt", "application/text", "blahblahblah.txt");
}

Upvotes: 1

Views: 13144

Answers (5)

aNdrade
aNdrade

Reputation: 11

I can´t vote your answered as is useful, follow dow. Thanks very much !

public FileResult Downloads(string file)      
{
            string diretorio = Server.MapPath("~/Docs");

            var ext = ".pdf";
            file = file + extensao;
            var arquivo = Path.Combine(diretorio, file);
            var contentType = "application/pdf";

            using (var client = new WebClient()) 
            {
                var buffer = client.DownloadData(arquivo);
                return File(buffer, contentType);
            }
        }     

Upvotes: 0

sinister
sinister

Reputation: 31

You must add "inline" for a new tab.

byte[] fileBytes = System.IO.File.ReadAllBytes(contentDetailInfo.ContentFilePath);
Response.AppendHeader("Content-Disposition", "inline; filename=" + contentDetailInfo.ContentFileName);
return File(fileBytes, contentDetailInfo.ContentFileMimeType);

Upvotes: 2

David
David

Reputation: 219096

The way you're using the File() method is to specify a file name in the third argument, which results in a content-disposition header being sent to the client. This header is what tells a web browser that the response is a file to be saved (and suggests a name to save it). A browser can override this behavior, but that's not controllable from the server.

One thing you can try is to not specify a file name:

return File(@"~\Files\output.txt", "application/text");

The response is still a file, and ultimately it's still up to the browser what to do with it. (Again, not controllable from the server.) Technically there's no such thing as a "file" in HTTP, it's just headers and content in the response. By omitting a suggested file name, the framework in this case may omit the content-disposition header, which is your desired outcome. It's worth testing the result in your browser to see if the header is actually omitted.

Upvotes: 1

Softtech
Softtech

Reputation: 112

please try this and replace your controller name and action name in html action link

public ActionResult ShowFileInNewTab()
{
     using (var client = new WebClient()) //this is to open new webclient with specifice file
    {
        var buffer = client.DownloadData("~\Files\output.txt");
        return File(buffer, "application/text");
    }     
}

OR

public ActionResult ShowFileInNewTab()
    {       
            var buffer = "~\Files\output.txt"; //bytes form this
            return File(buffer, "application/text");          
    }

this is action link which show in new blank tab

<%=Html.ActionLink("Open File in New Tab", "ShowFileInNewTab","ControllerName", new { target = "_blank" })%>

Upvotes: 0

Jason Berkan
Jason Berkan

Reputation: 8914

Use a target of blank on your link to open it in a new window or tab:

<a href="/ControllerName/Download" target="_blank">Download File</a>

However, forcing the browser to display the contents is out of your control, as it entirely depends on how the user has configured their browser to deal with files that are application/text.

If you are dealing with text, you can create a view and populate the text on that view, which is then returned to the user as a regular HTML page.

Upvotes: 0

Related Questions