System.IO.FileNotFoundExecption,GUID对于存储在数据库中的文件名和存储在服务器上的文件是不同的

时间:2014-06-19 16:39:34

标签: c# asp.net sql-server

我正在尝试使用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();
    }
}

0 个答案:

没有答案