从C#应用程序上传和下载SQL Server上的文件
本文关键字:Server SQL 文件 下载 应用 应用程序 程序上 | 更新日期: 2023-09-27 18:19:28
我有一个C#应用程序正在将文件上传到sql server,我使用此代码获取pdf文件,然后将其更改为"字节"以上传到sql服务器数据库。
private void mButtonAddCV_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "PDF Files | *.pdf";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (openFileDialog1.FileName.Length > 0)
{
pathCV = openFileDialog1.FileName;
}
}
// Read the file and convert it to Byte Array
string filePath = pathCV;
string contenttype = String.Empty;
contenttype = "application/pdf";
if (contenttype != String.Empty)
{
Stream fs = File.OpenRead(filePath);
BinaryReader br = new BinaryReader(fs);
bytes = br.ReadBytes((Int32)fs.Length);
}
}
我使用以下代码上传文件:
if (!mConnector.Update("INSERT INTO **** (***, ***, CV) " +
"VALUES ('" + *** + "', '" + *** + "', '" + bytes + "')"))
{
Messages.errorMessageBox("This CV already exists.");
}
else
{
ChangeScreen(ActiveScreen, ActiveScreens.ActiveScreen_CVList);
}
但现在我不知道如何下载这个文件,也不知道如何用数据库中存储的数据制作一个pdf文件来查看它。有人能帮我吗?
谢谢!
首先,让我们改变形成插入语句的方式,这样就不会向sql注入打开系统。这也将使插入语句更容易使用
var command = new SqlCommand("INSERT INTO myTable (x, y, z) VALUES (@a, @b, @c)", sqlConnection);
command.Parameters.Add(new SqlParameter("@a", bytes));
command.Parameters.Add(new SqlParameter("@b", bValue));
command.Parameters.Add(new SqlParameter("@c", bValue));
var resultingRows = command.ExecuteNonQuery();
要读取数据,请使用ExecuteReader,然后使用File对象将其保存到磁盘。
var command = new SqlCommand("Select a from myTable", sqlConnection);
var reader = command.ExecuteReader();
reader.Read();
var pdfBinaryBuffer = (byte[])reader[0];
// Save file to disk
var file = File.Create("myFile.pdf", pdfBinaryBuffer.Length);
file.Write(pdfBinaryBuffer, 0, pdfBinaryBuffer.Length);
file.Close();
我建议您使用SqlParameters插入字节数据。。。请参阅将字节数组插入sql server
然后,使用SqlDataReader's GetBytes(...)
函数读取记录,请参见此处。
我建议您上传pdf并将其保存在单独的文件夹中。你可以将路径保存在数据库表中,我认为这很好。
这是文件上传的代码
将"文件上传"控件拖动到.aspx页面(使用此代码是为了保存.PDF到文件夹)
protected void fileUpload()
{
if (fileUp.HasFile)
{
fileUp.SaveAs(Server.MapPath("~/PoPDF/" + this.txtCusPo.Text +".PDF"));
string imgPrintPo = this.txtCusPo.Text + ".PDF";
}
}
这是文件下载的代码
您可以将此代码放在按钮事件中,但这里我使用了GridView行命令事件。
protected void gridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
if (e.CommandName == "SelectDownload")
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "filename=" + e.CommandArgument);
Response.TransmitFile(Server.MapPath("~/PoPDF/") + e.CommandArgument);
//Response.Flush();
Response.End();
}
}