0

ファイルのダウンロードに問題があります。ファイル名とそのファイルをダウンロードするためのリンクを示すグリッドがあります。これは私のグリッドのコードです。

<asp:GridView ID="gv7" runat="server" AllowPaging="True" CssClass="tbl_green_parrot"
PageSize="5" Width="100%" AutoGenerateColumns="False" EmptyDataText="No Scheme data available" DataKeyNames="FilePath" OnPageIndexChanging="gv7_PageIndexChanging"             onrowdatabound="gv7_RowDataBound">
  <AlternatingRowStyle CssClass="tbl_green_parrot1" />
 <FooterStyle CssClass="tbl_green_parrotfoot" />
 <PagerStyle CssClass="tbl_green_parrotpager" />
 <SelectedRowStyle CssClass="tbl_green_parrotselect" />
 <EmptyDataRowStyle CssClass="tbl_green_parrotempty" />
 <Columns>
   <asp:TemplateField HeaderText="File Name">
   <ItemTemplate>
   <asp:HyperLink ID="lnkFile" Target="_blank" CausesValidation="false" runat="server"
   Text='<%# Bind("DisplayName") %>' NavigateUrl='<%# Bind("FilePath") %>' />
   </ItemTemplate>
   </asp:TemplateField>
   <asp:TemplateField HeaderText="Download" ItemStyle-Width="25px" ItemStyle-HorizontalAlign="Center">
   <ItemTemplate>
   <a id="lnkDLoad" href='<%# Bind("FilePath") %>' runat="server" target="_blank">
   <img src="Images/download.png" alt="Download" />
   </a>
   </ItemTemplate>
   <ItemStyle HorizontalAlign="Center" Width="25px" ></ItemStyle>
   </asp:TemplateField>
 </Columns>

<a>ここでは、ファイルパスをタグにバインドします。このコードは、Webサイトの同じルートフォルダーにファイルがある場合に実行されます。しかし、フォルダ内にあるファイルをダウンロードしようとすると、ダウンロードされません。

ダウンロードの背後にあるコード:

DataTable new_dt = new DataTable();
    new_dt.Columns.Add("DisplayName");
    new_dt.Columns.Add("FileName");
    new_dt.Columns.Add("FilePath");
    string Query = "SELECT DisplayName,FilePath,Universal From DistScheme";
    dt = DataAccessLayer.DAL.getFromDataTable(Query);
    string filename = "";
    if (dt.Rows.Count > 0)
    {
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow new_dr = new_dt.NewRow();
            if (dt.Rows[i]["Universal"].ToString() == "False")
            {
                filename = DistributorID + "_" + dt.Rows[i]["FilePath"].ToString();
            }
            else
            {
                filename = dt.Rows[i]["FilePath"].ToString();
            }
            string filepath = Server.MapPath("Uploads/Scheme/") + filename;
            if (File.Exists(filepath))
            {
                new_dr["DisplayName"] = dt.Rows[i]["DisplayName"].ToString();
                new_dr["FileName"] = filename;
                new_dr["FilePath"] = filepath;
                new_dt.Rows.Add(new_dr);
            }
        }
    }
    gv7.DataSource = new_dt;
    gv7.DataBind();

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

ファイルパスは「http」から始まる必要があります。http://domian-name/foldername/filename のように拡張子を付けてファイルパスに完全なパスを含めます。

于 2012-05-05T06:43:10.583 に答える
0

タスクを達成するには、つまりグリッドからファイルをダウンロードするには、以下のようにグリッドのテンプレート列の下に追加する必要があります。

<asp:TemplateField HeaderText="File" SortExpression="File Path">
                <ItemTemplate>                       
                    <asp:ImageButton ImageUrl="Images/download.png"  ID="imgbtnDownload" runat="server" CommandName="DOWNLOAD" Text="GetFile" CommandArgument='<%# Bind("FilePath") %>'  ></asp:ImageButton>
                </ItemTemplate>
            </asp:TemplateField>

コード ビハインド ファイルに以下のように Row_command イベントを追加する必要があります。

protected void gv7_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "DOWNLOAD")
    {
    // make sure fileName  contains only file name like 'test.pdf'  
        string fileName = Convert.ToString(e.CommandArgument);

    // make sure filePath  contains file path like 'Uploads/Scheme/test.pdf'        
        string filePath = Server.MapPath(Convert.ToString(e.CommandArgument));

        Response.Clear();
        Response.Buffer = true;

        // Read the original file from disk
        FileStream myFileStream = new FileStream(filePath, FileMode.Open);
        long FileSize = myFileStream.Length;
        byte[] Buffer = new byte[Convert.ToInt32(FileSize)];
        myFileStream.Read(Buffer, 0, Convert.ToInt32(FileSize));
        myFileStream.Close();
        // Tell the browse stuff about the file
        Response.AddHeader("Content-Length", FileSize.ToString());
        //Response.AddHeader("Content-Disposition", "inline; filename=" & fileneme.Replace(" ", "_"))
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
        //Response.TransmitFile(fileneme)
        //Response.ContentType = getMimeType(sExtention, oConnection)

        // Send the data to the browser
        Response.BinaryWrite(Buffer);
        Response.End();

    }
}

aspx ページから画像ボタンをクリックすると、ファイルを開くか保存するかのオプションが表示されます。

これがお役に立てば幸いです.幸せなコーディング...

于 2012-05-05T07:26:00.187 に答える