#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. Не могли бы вы указать оба имени файлов, пожалуйста?