使用asp.net Web表格Gridview从SQL数据源下载文件

问题描述 投票:0回答:2

我正在使用Telerik RadGrid控件,并且我正在使用GridAttachmentColumn作为他们文档中的推荐来下载文件,但我看到丢失了一些东西,也许是一些Code Behind?该文档讨论了禁用Ajax进行文件上传和导出但未下载的问题?

SQL表包含UNC路径,其中这些文件存储在网络共享中。 “下载”列指向正确的数据\位置,文件路径变为超链接,但单击它时不执行任何操作。

我也试过使用一个超链接列,它似乎部分适用于IE但不适用于Chrome。部分是因为一些文件被下载并且一些文件在屏幕上呈现。我需要使用适用于这两种浏览器的解决方案下载它们。

这是网格代码:

 <telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlDataSource1" Skin="WebBlue" AllowPaging="True">
<GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings>
        <MasterTableView AutoGenerateColumns="False" DataSourceID="SqlDataSource1" NoDetailRecordsText="No attachments to display.">
            <DetailTables>
                <telerik:GridTableView runat="server" DataKeyNames="SessionId" DataSourceID="SqlDataSource2" AllowPaging="False" PageSize="5" NoDetailRecordsText="No attachment to display.">
                    <Columns>
                        <telerik:GridAttachmentColumn DataSourceID="SqlDataSource2" HeaderText="Download" AttachmentDataField="DocName" AttachmentKeyFields="1" FileNameTextField="DocName" DataTextField="Path" UniqueName="Attachments" MaxFileSize="1048576">
                        </telerik:GridAttachmentColumn>
                    </Columns>
                </telerik:GridTableView>
            </DetailTables>
            <CommandItemSettings ShowAddNewRecordButton="False" ShowExportToExcelButton="True" ShowExportToPdfButton="True" ShowExportToWordButton="True" ShowRefreshButton="False" />
            <Columns>
                <telerik:GridBoundColumn DataField="SessionId" FilterControlAltText="Filter SessionId column" HeaderText="SessionId" SortExpression="SessionId" UniqueName="SessionId" Visible="False">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Ticket Number" FilterControlAltText="Filter TicketNumber column" HeaderText="Ticket Number" SortExpression="TicketNumber" UniqueName="TicketNumber">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Title" FilterControlAltText="Filter Title column" HeaderText="Title" SortExpression="Title" UniqueName="Title">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Description" FilterControlAltText="Filter Description column" HeaderText="Description" SortExpression="Description" UniqueName="Description" Visible="False">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="AffectedUser" FilterControlAltText="Filter AffectedUser column" HeaderText="AffectedUser" SortExpression="AffectedUser" UniqueName="AffectedUser">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="AssignedTo" FilterControlAltText="Filter AssignedTo column" HeaderText="AssignedTo" SortExpression="AssignedTo" UniqueName="AssignedTo">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Owner" FilterControlAltText="Filter Owner column" HeaderText="Owner" SortExpression="Owner" UniqueName="Owner">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Location" FilterControlAltText="Filter Location column" HeaderText="Location" SortExpression="Location" UniqueName="Location">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Resolution" FilterControlAltText="Filter Resolution column" HeaderText="Resolution" SortExpression="Resolution" UniqueName="Resolution">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Close Date" DataType="System.DateTime" FilterControlAltText="Filter CloseDate column" HeaderText="Close Date" SortExpression="CloseDate" UniqueName="CloseDate">
                </telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>

<FilterMenu RenderMode="Lightweight"></FilterMenu>

<HeaderContextMenu RenderMode="Lightweight"></HeaderContextMenu>
</telerik:RadGrid>

enter image description here

asp.net datagridview webforms radgrid
2个回答
0
投票

我猜测Telerik没有预测此控件的UNC路径使用情况,看起来你需要添加一些斜杠并将其格式化以使链接完全可点击。

file://///server/path/to/file.txt

即便如此,它可能无法完全跨浏览器兼容。从网站访问本地文件存在安全风险。

Linking a UNC / Network drive on an html page


0
投票

用不同的方法解决了这个问题。

  • 更改为HyperLinkColumn
  • 使用它如下DataNavigateUrlFormatString="~\filedownload_6?FileName={0}"
  • 添加了“下载页面”
  • 在运行应用程序的IIS中的网站中创建了一个虚拟目录,该目录指向文件共享并在Server.MapPath方法中使用它。 (〜/ Files /代码中)

https://support.microsoft.com/en-ca/help/308150/how-to-create-a-virtual-directory-on-an-existing-web-site-to-a-folder

文件下载页码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DBSearchSolution
{
    public partial class filedownload_6 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //string filename = Request.QueryString["29215_1_0_image001.png"].ToString();
            string filename = Request.QueryString["FileName"].ToString();
            Response.ContentType = "application/octet-steam";
            Response.AppendHeader("content-disposition", "attachment; filename=" + filename);
            Response.TransmitFile( Server.MapPath("~/Files/" + filename));
            Response.End();
        }


    }
}
© www.soinside.com 2019 - 2024. All rights reserved.