2015-02-06 59 views
0

我需要將文件的路徑及其屬性存儲到sql數據庫中。目前我所能做的就是將文件存儲在服務器上。我可以在控制器中看到文件屬性,但我不知道如何訪問它們。如何將FormData保存到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

嘗試使用這樣的功能。你可以用

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()); 
相關問題