Creating download link to a file on a file server

85,190

Solution 1

You can use ASHX file (say, downloadfile.ashx) and use the following code (not tested, but it will be something like that) in it:

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=abc.txt");                                            
 Response.WriteFile(Server.MapPath("\\servername\folder1\folder2\folder3\abc.txt"));
 Response.End();

and then use this in your anchor tag like:

<a href="downloadfile.ashx"  target=""_blank"">Click me</a>

Note: You can also pass parameters for downloading different files like:

<a href="downloadfile.ashx?file=abc.txt"  target=""_blank"">Click me</a>

and then, in ashx file, use the file name to download the appropriate file.

Solution 2

this piece of code will create a file in download folder with name=hi.txt and content as "thanks god, finally file got downloaded."

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=hi.txt");
 Response.Write("thanks god, finally file got downloaded.");
 Response.End();
Share:
85,190
Flater
Author by

Flater

Updated on July 05, 2022

Comments

  • Flater
    Flater almost 2 years

    I'm looking for a way to (easily, by preference ;)) create a download link to a file on a separate file server.

    The situation is as follows: the application I'm developing (asp.net 2.0 in vb.net but I have a similar issue in c#, either solution works for me) will be run internally for a company. As is good practice, the file storage and web application are on two separate servers.

    I basically need to be able to create a download link to a file, the only available URL i have to access the file is \servername\folder1\folder2\folder3\file.txt (can be any sort of file)

    Weblinks simply don't work. This is how it's currently set up:

    tablerowfield.Text = String.Format(
        "<a href=""\\servername\folder1\folder2\folder3\{0}"" 
            target=""_blank"">Click me</a>",
        filename)
    

    Which doesn't work for obvious reasons. It used to be set up to write that file to the application path itself and that worked perfectly, but it isn't good practice and that's why I'm changing it (or trying to).

    I read solutions about creating a download page and then having a table in your DB which holds the links and returns the proper web URL for download but the time constraint I am faced with unfortunately doesn't allow me to develop that.

    Assuming I can provide a string with the full filepath to the file like the above, what is the easiest way to just create a link that, when clicked, downloads the document?

    Note: I have 0 admin rights in this environment. That really isn't helping me. Let's assume I am given the correct link like above and have the appropriate file access rights and such.

    UPDATE:

    The above example does work in IE, but not in Firefox and Chrome. IE converts it to a file://servername/... link which does what it's supposed to, but FF and Chrome both actively decided that this is unsafe and have disabled it from their browsers.

  • Flater
    Flater over 12 years
    Ok I got the handler working, but it keeps gving me errors in the Response.WriteFile. I enter a string of form "\\server\folder\file.txt" and i get: Failed to map the path '/server/folder/file.txt' I tried every possible file. Any experience on this issue?
  • wasimbhalli
    wasimbhalli over 12 years
    You can pass paramter like file=abc.txt for first link, file=otherfile.txt etc as I already mentioned. So you will be getting file names dynamically and passing them to ASHX file. You need ASHX file so you can let the user download it from there (your domain) instead of using server path which doesn't exist on client side (if it's not on LAN)
  • Flater
    Flater over 12 years
    Ok disregard my previous post I can just drop the Server.Mappath and then it works :) still a bit fuzzy on finalizing this but you've helped me an awful lot! Thanks!
  • Flater
    Flater over 10 years
    Although correct, this answer is exactly the same as the one I marked as the solution nearly two years ago.
  • jitendragarg
    jitendragarg about 9 years
    I am unable to get this link working in a popup. Don't know why Response.Write does nothing.
  • digital.aaron
    digital.aaron over 7 years
    This solution worked for me, with the exception that I'm using Response.TransmitFile instead of Response.WriteFile, since it's better suited for large files.