如何将FormData保存到sql中

时间:2015-02-06 20:10:00

标签: sql-server asp.net-web-api multipartform-data

我需要将文件的路径及其属性存储到sql数据库中。目前,我所能做的就是将文件存储在服务器上。我可以在控制器中看到文件属性,但我不知道如何访问它们。

public class File
{
    public int FileId { get; set; }
    public string FileType { get; set; }
    public string FileDate { get; set; }
    public string FilePdf { get; set; }
    public string FileLocation { get; set; }
    public string FilePlant { get; set; }
    public string FileTerm { get; set; }
    public DateTime? FileUploadDate { get; set; }
    public string FileUploadedBy { get; set; }

    public string CompanyName { get; set; }
    public virtual ApplicationUser User { get; set; }
}

控制器

  [HttpPost]
    public async Task<HttpResponseMessage> PostFile()
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
        }

        string root = HttpContext.Current.Server.MapPath("~/App_Data");
        var provider = new MultipartFormDataStreamProvider(root);
        var result = await Request.Content.ReadAsMultipartAsync(provider);

       foreach (var key in provider.FormData.AllKeys)
        {
            foreach (var val in result.FormData.GetValues("companyname")

                .FirstOrDefault())
            {
                if (key == "companyName")
                {
                    var companyName = val;
                    var fileDate = val;
                    var fileLocation = val;
                    var filePlant = val;
                    var fileTerm = val;
                    var fileType = val;
                    var fileUploadDate = val;
                    var fileUploadedBy = val;
                }
            }
        }

        // On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"
        // so this is how you can get the original file name
        var originalFileName = GetDeserializedFileName(result.FileData.First());

        var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);
        string path = result.FileData.First().LocalFileName;

        //Do whatever you want to do with your file here

        //db.Files.Add();
        db.SaveChanges();

        return this.Request.CreateResponse(HttpStatusCode.OK, originalFileName);
    }

    private string GetDeserializedFileName(MultipartFileData fileData)
    {
        var fileName = GetFileName(fileData);

        return JsonConvert.DeserializeObject(fileName).ToString();
    }

    public string GetFileName(MultipartFileData fileData)
    {
        return fileData.Headers.ContentDisposition.FileName;
    }

1 个答案:

答案 0 :(得分:1)

尝试使用这样的功能。您可以替换为

private object GetFormData<T>(MultipartFormDataStreamProvider result)
{
    if (result.FormData.HasKeys())
    {
        var unescapedFormData = Uri.UnescapeDataString(result.FormData
            .GetValues(0).FirstOrDefault() ?? String.Empty);
        if (!String.IsNullOrEmpty(unescapedFormData))
            return JsonConvert.DeserializeObject<T>(unescapedFormData);
    }

    return null;
}

像这样使用

File file = GetFormData(result);

您想要的主要代码是:

JsonConvert.DeserializeObject<File>(result.FormData.GetValues(0).FirstOrDefault());