如何使用MVC中的Rest Sharp Web API在数据库和文件夹中保存和上传文件?

时间:2019-08-13 10:42:39

标签: c# asp.net-web-api model-view-controller file-upload restsharp

 [Required(ErrorMessage = "Please Upload Picture")]
  public String UserPic { get; set; }

在我的API控制器中:

   [HttpPost]
    [Route("api/Details/PostUsers")]
    public HttpResponseMessage PostUsers(UserDetail model)
    {

        if (ModelState.IsValid)
        {
            try
            {
                using (DBEntities db = new DBEntities())
                {


                    var obj = db.sp_InsertUser(model.FirstName, model.MiddleName, model.LastName, model.DateOfBirth, model.Gender, model.EmailAddress, model.UserPassword, model.MobileNo,UserPic);

                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Redirect, obj );
                    return response;
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        else
        {
            //  return Ok(model);
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }

在我的家庭控制器中

 [HttpPost]
    public ActionResult Register(Users users, HttpPostedFileBase UserPic)
    {
        var client = new RestClient("mylocalhost");
        var request = new RestRequest("api/Details/PostUsers", Method.POST);
        var fileName = Path.GetFileName(UserPic.FileName);       
        request.AddParameter("UserPic", UserPic.FileName, ParameterType.UrlSegment);
        request.AddJsonBody(users);
        var response = client.Execute(request);          
        if (response.Data != null)
        {

            var path = Path.Combine(Server.MapPath("~/Content/Upload"), fileName);
            users.UserPic.SaveAs(path);
            ViewBag.Message = "File has been uploaded successfully";

            return RedirectToAction("Index");
        }

        return View(users);
    }

我正在尝试上载Pic,然后使用其余的Sharp文件保存到数据库。我已经尝试了许多示例,但这没有用。帮我解决这个问题。在此先感谢...

1 个答案:

答案 0 :(得分:0)

我在这里看到的
var obj = db.sp_InsertUser(model.FirstName, model.MiddleName, model.LastName, model.DateOfBirth, model.Gender, model.EmailAddress, model.UserPassword, model.MobileNo,UserPic); 试图保存UserPic对象,而不是字节数组,它本身就是对象,在数据库字段中,您将得到 System.Web.HttpPostedFileWrapper 而不是文件字节。

这是因为UserPic为HttpPostedFile。 HttpPostedFileWrapper类派生自HttpPostedFileBase类,并用作HttpPostedFile类的包装。它具有4个属性:

  1. ContentLength
  2. ContentType
  3. 文件名
  4. InputStream

您需要存储文档的字节数组,而不是这样做。 这里是一个这样做的例子:

public byte[] GetByteArrayOfPosterFile(HttpPostedFile MyFile)
{    
    int FileLen = MyFile.ContentLength;
    byte[] input = new byte[FileLen];
    Stream MyStream = MyFile.InputStream;
    // Read the file into the byte array.
    MyStream.Read(input, 0, FileLen);
    return input;
}

上述方法将为您返回已发布文件的字节数组,以后可以将其存储在数据库中。您可以使用其他字段扩展数据库表,以保存元信息,例如ContentType和FileName。

要仅从HttpPostedFile中获取文件名,您需要访问其名称属性FileName e.x string fileName = MyFile.FileName;

相关问题