我以这种方式使用FileUpload
控件将PDF文件上传到文件夹中:
string pdfFilPath = Path.GetFileName(FileUpload1.PostedFile.FileName.ToString());
string pdfPath = Server.MapPath(@"~/PDF/" + pdfFilPath);
FileUploadFoto.PostedFile.SaveAs(pdfPath);
但与此同时,我在数据库中为此文件插入Id
,Description
和PDFUrl
:
SqlCommand cmd = new SqlCommand("INSERT INTO Book(Description, PDFUrl)
VALUES (''' + textBoxDescription.Text + "','" + "~/PDF/" + pdfFilPath + "')", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
如果我从数据库中选择所有列并在GridView
上显示它们,它们显示如下:
ID Description PDFUrl 1 In this book... ~/PDF/jQuery in Action.pdf
现在,如果我要删除书评,我所做的只是("DELETE FROM Book Where Id='" + textBoxId.Text + "'", conn);
,但这只会删除Id
,Description
和PDFUrl
数据库中。
我的问题是:当我从数据库中删除评论时,如何同时删除PDF文件?
答案 0 :(得分:0)
如果您拥有的只是ID,那么首先要根据ID从DB中获取PDFUrl。
然后:
FileInfo fi = new FileInfo(Server.MapPath(PDFUrl));
fi.Delete;
来源:MSDN
此外,您应该确实使用parameterized queries,原因在OWASP SQL Injection Prevention Cheat Sheet上有解释。
答案 1 :(得分:0)
您可以创建一个从目录中删除文件的方法,然后从数据库中删除该文件。
public void DeleteFile(string id)
{
FileInfo fi = new FileInfo(Server.MapPath(PDFUrl));
fi.Delete;
SqlComand cmd = new SqlComand("DELETE FROM Book Where Id='" + textBoxId.Text + "'", conn);
cmd.ExecuteNonQuery();
}
答案 2 :(得分:0)
if (File.Exists(Server.MapPath(PDFUrl))
{
File.Delete(Server.MapPath(PdfUrl));
}