私は2つのテーブル、ノートとファイル(1対多)を持っています。 "Files"フォルダにすべてのファイルを保存した後、NoteID(FK)に加えてファイルテーブルに名前、パス、拡張子を保存しました。条件に基づいてフォルダからファイルを取得mvc asp
正常にアップロードされました。 しかし、NoteID condtionsに基づいてファイルをダウンロードしたいときは、できません。 私はそのフォルダ内のすべてのファイルを取得できます。
私の質問は、特定のフォルダから条件に基づいていくつかのファイルを取得する方法ですか? 私はいくつかのソリューションを試してみましたが、うまくいきません。
助けが必要ですか?
処置:
public ActionResult Download(int NoteID)
{
var fs = db.Files.Where(f => f.NoteID == NoteID);
string[] files = Directory.GetFiles(Server.MapPath("/Files"));
for (int i = 0; i < files.Length; i++)
{
files[i] = Path.GetFileName(files[i]);
}
ViewBag.Files = files;
return View();
}
public FileResult DownloadFile(string fileName)
{
var filepath = System.IO.Path.Combine(Server.MapPath("/Files/"), fileName);
return File(filepath, MimeMapping.GetMimeMapping(filepath), fileName);
}
ダウンロードビュー:
@{
ViewBag.Title = "Download Files";
var Files = (ViewBag.Files as string[]);
if (Files != null && Files.Any())
{
foreach (var file in Files)
{
<br />
@Html.ActionLink(file, "DownloadFile", new { fileName = file })
<br />
}
}
else
{
<label>No File(s) to Download</label>
}
}
編集:
上記のコードが動作し、 'ファイル' フォルダ
内のすべてのファイルを取得し、表示されます私はIOEceptionを取得するコードを実行しようとしている
のアクション:
public ActionResult Download(int? NoteID)
{
var fs = db.Files.Where(f => f.NoteID == NoteID);
string[] files = new string[(fs.Count()) - 1];
int counter = 0;
foreach (var item in fs)
{
files[counter] = Directory.GetFiles(Server.MapPath("/Files/"+item.FileName)).Single();
/*here is the Exception
*
System.IO.IOException:
{ "The directory name is invalid.\r\n"}
InnerException message:
The directory name is invalid.
*/
}
for (int i = 0; i < files.Length; i++)
{
files[i] = Path.GetFileName(files[i]);
}
ViewBag.Files = files;
return View();
}
public FileResult DownloadFile(string fileName)
{
var filepath = System.IO.Path.Combine(Server.MapPath("/Files/"), fileName);
return File(filepath, MimeMapping.GetMimeMapping(filepath), fileName);
}
ビュー:あなたの新しいコードで
@{
ViewBag.Title = "Download Files";
var Files = (ViewBag.Files as string[]);
if (Files != null && Files.Any())
{
foreach (var file in Files)
{
<br />
@Html.ActionLink(file, "DownloadFile", new { fileName = file })
<br />
}
}
else
{
<label>No File(s) to Download</label>
}
}
あなたが例外を受け取るいくつか説明をお願いできますか? – kat1330
System.IO.IOException: {"ディレクトリ名が無効です。\ r \ n"} InnerExceptionメッセージ: ディレクトリ名が無効です。 – askm
あなたの動作で、DownloadFile()は 'filepath'を持つ値を確認しましたか?例外があるので、ファイルを見つけるのに問題があります。右? – kat1330