0

I am uploading image to a folder and saving its path in db.Here is my code.

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

But the path is stored as double forward slash,which is wrong.How can i save the path as single slash. Thanks in advance for help.

4

1 回答 1

0

您说路径是用“双斜杠”存储的,即//. 我认为您的意思是“双反斜杠”,即\\. 如果我弄错了,请提供一个例子。

双反斜杠是合适的,因为它转义了反斜杠字符。诸如\n换行符之类的值,因此必须将实际的反斜杠转义为\\. 这是 JSON 如何存储字符串的一部分。

但是,您可能只想考虑将文件名存储到文档中。上传文件夹的完整路径将是多余的。如果您想更改它,那么您应该能够编辑设置,而不必修改所有文档。

您的代码的其他问题:

  • 删除这一行:

    if (query.Count() > 0)
    

    这是不必要的,并且会导致查询被执行两次。

  • 这一行:

    session.SaveChanges();
    

    循环需要移动foreach。您只需要将一批更改发送到 RavenDB。

  • 使用一致的命名约定。局部变量的FileName大小写应为fileName.

于 2013-09-28T20:57:57.513 回答