К основному контенту

Загрузка файла на сервер в ASP .NET

В этой статье я бы хотел описать последовательность загрузки картинки или любого другого файла на сервер. По сравнению со скриптами PHP (я не беру во внимание фреймворки), на мой взгляд, гораздо проще. Но, это дело привычки.

Эпилог

Поскольку статья не относится непосредственно к созданию сайтов на ASP .NET, то не буду описывать подробно, как в Visual Studio создавать проект, настраивать, запускать и т.д. Для примера, я создал самый обычный проект сайта на ASP .NET, в котором уже была базовая разметка. Это сильно сократило время и силы для создания примера.

Исходный код

Для рабочего примера мы рассмотрим всего 2 файла: Default.aspx и Default.aspx.cs. Первый - это разметка, а второй - это код, который выполняется на стороне сервера.


Default.aspx

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
 
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
 
    <hr />
 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowHeader="false">
        <Columns>
            <asp:BoundField DataField="Text" />
            <asp:ImageField DataImageUrlField="Value" ControlStyle-Height="100" ControlStyle-Width="100" />
        </Columns>
    </asp:GridView>
</asp:Content>

Default.aspx.cs

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
 
public partial class _Default : Page
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string[] filePaths = System.IO.Directory.GetFiles(Server.MapPath("~/Images/"));
            System.Collections.Generic.List<ListItem> files = new System.Collections.Generic.List<ListItem>();
            foreach (string filePath in filePaths)
            {
                string fileName = System.IO.Path.GetFileName(filePath);
                files.Add(new ListItem(fileName, "~/Images/" + fileName));
            }
            GridView1.DataSource = files;
            GridView1.DataBind();
        }
    }
 
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            string fileName = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
            FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Images/") + fileName);
            Response.Redirect(Request.Url.AbsoluteUri);
        }
    }
}

Немного пояснений. По разметке - тут все просто. Три компонента: поле для выбора файла, кнопка для загрузки файла на сервер и таблица с полями имени файла и миниатюры картинки.
Что касается ServerSide обработчика, то так же нет ничего сложного. При загрузке страницы заполняется таблица. При условии, что выполняется не POST запрос, считывается содержимое папки Images и заполняется табличка. Функция Button1_Click - это обработчик загрузки файла на сервер. Опять же, при условии, что указан файл загрузки - загружаем его в папку Images.

Заключение

Приведенный алгоритм и код - это универсальное решение для загрузки файла на сервер. Единственный минус - это таблица. Если загружать не картинку, то и миниатюры не будет. В любом случае, загрузка будет произведена.

Комментарии

Популярные сообщения из этого блога

Прямые ссылки на файлы Google диска

В предыдущей статье я рассказал, как подключить свой JavaScript файл к блогу BLOGSPOT . Но для того, что бы их подключить нужны прямые ссылки на файл, а Google диск при предоставлении общего доступа к файлу выдает ссылку на предварительный просмотр, которая никак напрямую не ссылается на файл. Для Google диска прямая ссылка на файл - это ссылка на скачивание. Ниже описаны два способа создания ссылки на скачивание на примере файла prism.js.

События для ведения таблиц

Как и всегда, в пылу проекта внезапно родилась Z табличка. Главный нюанс был в том, что она должна была хранить пароли для авторизации на стороннем сервере. Естественно, никто не хотел хранить пароли в открытом виде, а двустороннее шифрование SAP не умеет без сторонних пакетов и надстроек. Далее, все как обычно - придумали алгоритм, сделали табличку. Дело осталось за малым - нужно шифровать пароли, которые вводит пользователь. Делать отдельную программу нет смысла, поскольку ее функционал мало чем будет отличаться от сгенерированного. Вот здесь на помощь приходят события! С их помощью можно, наверное, все. По крайней мере, я не нашел чего-либо, что нельзя сделать с данными через события.

OOP ALV GRID с HTML шапкой

В этой статье хочу постараться подробно описать и привести пример, как можно создать ALV отчет с таблицей на весь экран и с HTML шапкой вверху. Я не буду описывать начальный этап, где пишется селекционный экран или делается выборка данных. Будем считать, что основа у нас есть и нам нужно просто вывести данные. Главной изюминкой является то, что нужно вывести ALV GRID на экран без использования каких-либо дополнительных элементов на экране. Step-By-Step Шаг 1. Создание окна Создаем самое простое окно с номером 100. На него не нужно кидать никаких контейнеров. Оно нам нужно только для модулей PAI и PBO и вывода на него ALV GRID.