我正在尝试使用GUID来允许用户上传具有相同名称的文件,但GUID附加到文件名&存储在数据库中的文件路径与附加到服务器上存储的文件的GUID不同。这意味着它为同一个文件提供了两个不同的GUID。因此,当我尝试从服务器下载文件时,它给我一个FileNotFound异常,因为命令arguement从数据库获取文件名,因此当它进入服务器时它无法找到该文件作为存储在该服务器上的同一文件的GUID服务器是不同的。 如果有人能给我一些可以理解的建议,请。
我的数据库架构:
Table: Sales
Columns: ReceiptFileName(Stores Name without GUID)
Coulmn:ReceiptFilePath(Stores file path with GUID)
Column: filename(Stores filename with GUID)
Aspx代码:
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Download" CommandArgument='<%# Bind("filename") %>' Text='<%# Bind("ReceiptFileName") %>' ></asp:LinkButton>
</ItemTemplate>
上传代码:
if (FileUpload1.HasFile)
{
//check file Extension & Size
string filename = FileUpload1.PostedFile.FileName;
{
filename = filename + Guid.NewGuid();
}
int filesize = FileUpload1.PostedFile.ContentLength;
if (filesize > (20 * 1024))
{
Label1.Text = "Please upload a zip or a pdf file";
}
string fileextention = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileextention.ToLower() != ".zip" && fileextention.ToLower() != ".pdf")
{
Label1.ForeColor = System.Drawing.Color.Green;
Label1.Text = "Please upload a zip or a pdf file";
}
else
{
//string ReceiptFileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string ReceiptFileName = Path.GetFileName(filename);
//save file to disk
FileUpload1.SaveAs(Server.MapPath("~/Reimbursement/Reciepts/" + ReceiptFileName));
}
}
添加文件名和收据名的方法
public static int AddSale(SaleID, string ReceiptFileName,string ReceiptFilePath, string filename)
{
int sale;
SqlCommand addSales = new SqlCommand("addSale", con);
addSale.CommandType = CommandType.StoredProcedure;
addSale.Parameters.AddWithValue("@ReceiptFileName", ReceiptFileName);
addSale.Parameters.AddWithValue("@filename", filename);
addSale.Parameters.AddWithValue("@ReceiptFilePath", ReceiptFilePath);
try
{
con.Open();
added = addSale.ExecuteNonQuery();
}
finally
{
con.Close();
}
下载代码:
protected void gridExpenditures_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Download")
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("content-disposition", "FileName=" + e.CommandArgument);
Response.TransmitFile(Server.MapPath("~/Reimbursement/Reciepts/") + e.CommandArgument);
Response.End();
}
}