Загрузка файла после его сохранения в базе данных SQL Server 2008 - PullRequest
1 голос
/ 19 марта 2011

WEB FRAMEWORK: ASP.NET в C #

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    string filePath = FileUpload1.PostedFile.FileName;
    string filename = System.IO.Path.GetFileName(filePath);
    string ext = System.IO.Path.GetExtension(filename);
    string contenttype = String.Empty;

    switch (ext)
    {
        case ".doc":
            contenttype = "application/vnd.ms-word";
            break;
        case ".docx":
            contenttype = "application/vnd.ms-word";
            break;
        case ".pdf":
            contenttype = "application/pdf";
            break;
   }
    if (contenttype.Equals(String.Empty))
    {
        Response.Write(@"<script language='javascript'>alert('You have selected an invalid resume type.')</script>");
        return;
    }
    Stream fs = FileUpload1.PostedFile.InputStream;
    BinaryReader br = new BinaryReader(fs);
    Byte[] bytes = br.ReadBytes((Int32)fs.Length);

    SqlConnection myConnection = new SqlConnection("user id=;" + "password=;server=;" +
                                  "Trusted_Connection=yes;" +
                                  "database=contractors; " +
                                  "connection timeout=30");
     try
    {
        myConnection.Open();
    }
    catch (Exception el)
    {
        Console.WriteLine(el.ToString());
    }


    SqlCommand myCommand = new SqlCommand("Command String", myConnection);
    myCommand.CommandText = "INSERT INTO contractor (firstName, lastName,phone,email,company,location,fileName,contentType,data,date) " +
                    "Values (@sqlfirstName,@sqllastName,@sqlphone,@sqlemail,@sqlcompany,@sqllocation,@Name,@ContentType,@Data,@sqldate)";


    myCommand.Parameters.Add("@Name", System.Data.SqlDbType.VarChar).Value = filename;
    myCommand.Parameters.Add("@ContentType", System.Data.SqlDbType.VarChar).Value = contenttype;
    myCommand.Parameters.Add("@Data", System.Data.SqlDbType.Binary).Value = bytes;
    myCommand.Parameters.Add("@sqlfirstName", System.Data.SqlDbType.VarChar, 50).Value = TextBox1.Text;
    myCommand.Parameters.Add("@sqllastName", System.Data.SqlDbType.VarChar, 50).Value = TextBox2.Text;
    myCommand.Parameters.Add("@sqlemail", System.Data.SqlDbType.VarChar, 75).Value = TextBox4.Text;
    myCommand.Parameters.Add("@sqlphone", System.Data.SqlDbType.VarChar, 25).Value = TextBox3.Text;
    myCommand.Parameters.Add("@sqlcompany", System.Data.SqlDbType.VarChar, 30).Value = TextBox5.Text;
    myCommand.Parameters.Add("@sqllocation", System.Data.SqlDbType.VarChar, 70).Value = TextBox6.Text;
    myCommand.Parameters.Add("@sqldate", System.Data.SqlDbType.DateTime, 30).Value = DateTime.Now;


    myCommand.ExecuteNonQuery();
    try
    {
        myConnection.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

    Response.Write(@"<script language='javascript'>alert('You information has been submitted. Thank you.')</script>");

   }

 }

После загрузки информации у меня есть другая страница, которая отображает информацию для администратора с помощью gridview.Кто-нибудь поможет мне с тем, как перевести это обратно в загружаемый файл?Вот код ASP.net

<div>
    <div class="article">

        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" emptydatatext="No data available"
            AllowSorting="True" AutoGenerateColumns="False" 
            DataSourceID="SqlDataSource1" 
            onselectedindexchanged="GridView1_SelectedIndexChanged">
            <Columns>
                <asp:CommandField ShowSelectButton="True" SelectText="Get Resume" />
                <asp:BoundField DataField="firstName" HeaderText="First Name" 
                    SortExpression="firstName" />
                <asp:BoundField DataField="lastName" HeaderText="Last Name" 
                    SortExpression="lastName" />
                <asp:BoundField DataField="phone" HeaderText="Phone Number" 
                    SortExpression="phone" />
                <asp:BoundField DataField="email" HeaderText="Email" SortExpression="email" />
                <asp:BoundField DataField="company" HeaderText="Company" 
                    SortExpression="company" />
                <asp:BoundField DataField="location" HeaderText="Location" 
                    SortExpression="location" />
                <asp:BoundField DataField="fileName" HeaderText="fileName" 
                    SortExpression="fileName" Visible="False" />
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="id" Visible="False" />
                <asp:BoundField DataField="date" HeaderText="date" SortExpression="date" />
                <asp:BoundField DataField="contentType" HeaderText="contentType" 
                    SortExpression="contentType" Visible="False" />
                </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:contractorsConnectionString %>" 
            SelectCommand="SELECT [firstName], [lastName], [phone], [email], [company], [location], [fileName], [id], [date], [data], [contentType] FROM [contractor]">
        </asp:SqlDataSource>

      </div>
      </div>

1 Ответ

2 голосов
/ 19 марта 2011

То, как вы пытаетесь реализовать загрузку, имеет несколько проблем и потенциальных проблем.

Используйте универсальный обработчик для чтения файла и отправки файла.

В gridView добавьте ссылку на универсальный обработчик и отправьте по запросу идентификатор файла, который вы хотите загрузить.

например <a taget="_blank" href="/downloadFile.ashx?id=3">download</a>

затем на ashx вы читаете 3, открываете базу данных и затем отправляете файл.

Также

 Response.Write(@"<script language='javascript'>alert('You have selected an invalid resume type.')</script>");

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

Консоль не работает на asp.net - пожалуйста, уделите немного времени, чтобы понять, что и как происходит при рендеринге страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...