0

画像をフォルダーにアップロードし、そのパスを db.Here に保存しています。コードは次のとおりです。

[HttpPost]
public ActionResult UploadPic(FileManagement fmanage, HttpPostedFileBase file)
{
    string email = User.Identity.Name;
    if (file != null && file.ContentLength > 0)
    {
        var FileName = string.Format("{0}.{1}", Guid.NewGuid(), Path.GetFileName(file.FileName));
        var path = Path.Combine(Server.MapPath("~/Content/Uploads"), FileName);
        file.SaveAs(path);
        using (var session = DocumentStore.OpenSession("RavenMemberShip"))
        {
            var query = from q in Session.Query<Registration>() where q.Email == email select q;
            if (query.Count() > 0)
            {
                foreach (var updated in query)
                {
                    updated.FileName = FileName;
                    updated.Path = path;
                    session.SaveChanges();
                }
            }
        }
    }
    else
        ModelState.AddModelError("", "Remove the errors and try again");

    return View();
}

しかし、パスは二重のスラッシュとして保存されますが、これは間違っています。パスを単一のスラッシュとして保存するにはどうすればよいですか? 助けてくれてありがとう。

4

1 に答える 1

0

あなたは、パスが「二重スラッシュ」で保存されていると言いました//あなたは「二重のバックスラッシュ」を意味していたと思います\\。間違っている場合は例を挙げてください。

バックスラッシュ文字をエスケープするため、二重のバックスラッシュが適切です。のような値\nは改行になるため、実際のバックスラッシュは としてエスケープする必要があります\\。これは、JSON が文字列を格納する方法の一部です。

ただし、ファイル名のみをドキュメントに保存することを検討することもできます。アップロード フォルダーへのフル パスは冗長になります。変更したい場合は、すべてのドキュメントを変更するのではなく、設定を編集するだけでよいはずです。

コードに関するその他の問題:

  • 次の行を削除します。

    if (query.Count() > 0)
    

    これは不要であり、クエリが 2 回実行される原因となっています。

  • この行:

    session.SaveChanges();
    

    ループのに移動する必要があります。foreachRavenDB に送信される変更の単一のバッチのみが必要です。

  • 一貫した命名規則を使用してください。FileNameローカル変数は、大文字と小文字を区別する必要がありますfileName

于 2013-09-28T20:57:57.513 に答える