5

I have a file upload program written in ASP.NET MVC. It is currently on my local development machine, and I would like to know how (if it is possible) to generate a link for each uploaded file so when it is clicked, the item is displayed/downloaded etc.

Current code/markup that handles displaying file list:

<table>
    <tr>
        <th></th>
        <th>
            Name
        </th>
        <th>
            Length
        </th>
        <th></th>
    </tr>
    <%
    var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads");
    foreach (var file in Directory.GetFiles(path))
    {
        var item = new FileInfo(file);
    %>
    <tr>
        <td></td>
        <td>
            <%=Html.Encode(Path.GetFileName(item.Name))%>
        </td>
        <td>
            <%=Html.Encode(item.Length >= 1024 ? item.Length / 1024 + " kilobytes" : item.Length + " bytes")%>
        </td>
        <td>
            // This is the line in question. Does not work as-is.
            <a href="<%= item.FullName %>"><%= Html.Encode(Path.GetFileName(item.Name)) %></a>
        </td>
    </tr>
    <% } %>
</table>

I imagine I will have to change the file-handling code around once this goes live, but for now this is sufficient. Suggestions are also welcome :)

Thanks!

3 Answers 3

12

Use Url.Content, e.g.:

<img src="<%= Url.Content("~/Content/UserImages/FileName.jpg") %>" />

The tilde means "the root of my site, wherever that happens to be." You don't have to put your files in Content; you can put them wherever you want under your site root.

Sign up to request clarification or add additional context in comments.

Comments

7

Yes the appropriate equivalent to BaseDirectory in an ASP.NET app is HttpRuntime.AppDomainAppPath. However you might also find the Server.MapPath method useful. You get to the server method via HttpContext.Current.Server.

Having said that are you sure you want this sort of code in your view. Its seems to me that the list of values you want to display ought to be generated by the controller.

Comments

1
<a href="<%= Url.Content(System.Web.VirtualPathUtility.ToAppRelative("~/" + file.Substring(AppDomain.CurrentDomain.BaseDirectory.Length))) %></a>

1 Comment

+1 just what I wanted (for MVC3 -- linking to elmah.axd), thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.