System.IO.FileNotFoundExecption, даже при наличии файла

#c# #asp.net

#c# #asp.net

Вопрос:

Я загружаю файлы, используя GUID для их имен, а затем пытаюсь их загрузить, но я получаю сообщение об ошибке file not found, даже если файл есть на сервере, я думаю, я делаю что-то не так с аргументом команды, но я не уверен, что. Пожалуйста, скажите мне, где я ошибаюсь, любая помощь приветствуется.

Схема базы данных: у меня есть 2 столбца: ReceiptFileName — хранит имя файла без GUID для пользовательского интерфейса. filename — сохраняет имя файла с идентификатором GUID.

Aspx-код:

  <ItemTemplate>
     <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Download" CommandArgument='<%# Bind("filename") %>' Text='<%# Bind("ReceiptFileName") %>' ></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
 

Код для загрузки:

 {
        if (FileUpload1.HasFile)
        {
            //check file Extension amp; 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" amp;amp; 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("Reciepts/"   ReceiptFileName));
}
 

Код для Downlaod:

 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();
        }
    }
 

Комментарии:

1. Можете ли вы показать несколько примеров имен файлов с полным путем, сгенерированных вашей системой?

2. Вы прошлись по коду и проверили полный путь к файлу?

Ответ №1:

Это может быть просто глупо, но я могу читать только разные пути к файлам:

 FileUpload1.SaveAs(Server.MapPath("Reciepts/"   ReceiptFileName));
 

Против:

 Response.TransmitFile(Server.MapPath("~/Reimbursement/Reciepts/")
 

В нем есть последний путь Reimbursement . Первый этого не делает.

Комментарии:

1. Нет, я пытался это сделать, это не имеет никакого значения.

2. Я думаю, что это как-то связано с аргументом GUID и command, потому что, когда я не использовал GUID для кода и файлов базы данных, загрузка и загрузка были идеальными.

3. Если вы установите отладчик в обеих строках, каков путь к файлу для обоих?

4. В обоих случаях путь к файлу — это /Возмещение / Получение / … тогда мое имя файла

5. Не могли бы вы указать оба имени файлов, пожалуйста?