Member 14144306 Ответов: 1

Как сохранить путь к файлу при загрузке файлов из gridview в ASP.NET


Итак, у меня есть gridview,который отображает имя изображения, Изображения и ссылку на изображение для загрузки из базы данных SQL server. Я хочу сохранить путь к изображению в базе данных после загрузки изображения (при нажатии кнопки link) в отдельной таблице БД. Пожалуйста, помогите мне! Мне это нужно как можно скорее ;(
Эта веб-форма загрузки изображений подключена к моей другой веб-форме-загрузке изображений, которая имеет поле ImgPath (nvarchar255).





Ниже приведены мои коды:

Обзор: что у меня есть до сих пор
1. Gridview изображений и ссылок на изображения
2.Gridview извлекается из базы данных
3.Возможность загрузки изображения


Что мне нужно:
1.когда изображение загружено--> сохраните путь к изображению в базе данных sql server

Что я уже пробовал:

aspx:
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand">
                        <Columns>
                     
                            <asp:BoundField HeaderText="ID" DataField="AdvID" />
                            <asp:BoundField HeaderText="Name" DataField="Name" />
                            <asp:BoundField HeaderText="Item" DataField="Item" />
                            <asp:ImageField HeaderText="Image" DataImageUrlField="ImgPath" ControlStyle-Height="120" ControlStyle-Width="140">
                                <ControlStyle Height="120px" Width="140px"></ControlStyle>
                            </asp:ImageField>
                            <asp:TemplateField HeaderText="View Information">
                                <ItemTemplate>
                                    <asp:LinkButton ID="lnkView" runat="server" CommandArgument='<%#Eval("AdvID") %>' OnClick="lnk_OnClick">View</asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="DownloadLink">
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("Item") %>' Text='<%# Eval("Item") %>' CommandName="Download"></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>



aspx.cs:

public partial class AdvGridView : System.Web.UI.Page
{

    SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString());
 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            this.BindGrid();
        }
    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Download")
        {

            Response.Clear();
            Response.ContentType = "application/octect-stream";
            Response.AppendHeader("content-disposition", "filename=" + e.CommandArgument);
            Response.TransmitFile(Server.MapPath("~/Images/") + e.CommandArgument);
            Response.End();

         
        }
    }
    void FillGridView()
    {
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();
        SqlDataAdapter sqlDa = new SqlDataAdapter("ViewAll", sqlCon);
        sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
        DataTable dtbl = new DataTable();
        sqlDa.Fill(dtbl);
        sqlCon.Close();
        GridView1.DataSource = dtbl;
        GridView1.DataBind();
    }

    protected void lnk_OnClick(object sender, EventArgs e)
    {
        int AdvertisementID = Convert.ToInt32((sender as LinkButton).CommandArgument);
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();
        SqlDataAdapter sqlDa = new SqlDataAdapter("ViewByID", sqlCon);
        sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlDa.SelectCommand.Parameters.AddWithValue("@AdvID", AdvertisementID);
        DataTable dtbl = new DataTable();
        sqlDa.Fill(dtbl);

        sqlCon.Close();

    }

    private void BindGrid()
    {
        GridViewService.WebService service = new GridViewService.WebService();
        GridView1.DataSource = service.Get();
        GridView1.DataBind();
    }



}

1 Ответов

Рейтинг:
0

F-ES Sitecore

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


Member 14144306

Спасибо за ваш ответ. Можно ли отключить кнопку ссылки на скачивание после ее нажатия? Например, не удается загрузить снова во второй раз? Или когда вы нажимаете кнопку ссылки, она показывает, что изображение уже загружено в базу данных

F-ES Sitecore

Проблема с такими вещами заключается в том, что пользователь является возвращенным пользователем и уже загрузил файл. Даже если вы требуете, чтобы люди вошли в систему, могут ли они просто создать новые учетные записи? Кроме того, серверный код не имеет возможности узнать, был ли файл загружен. Пользователь мог бы выбрать не загружать его, или загрузить его, но интернет упал на полпути, Хотя или что-то еще.

Member 14144306

О, я не слишком уверен, как это работает, но мой преподаватель попросил меня сделать его веб-сервисом, и я сделал это. Не уверен, что это можно сделать с помощью веб-сервиса.

F-ES Sitecore

Не может быть, нет. Те, кто может, делают. Те, кто не может, учат.