2012-08-01 2 views
2

C# MVC3에서 .net 버전의 MPJX를 사용하여 MS 프로젝트 파일을 읽으려고합니다. jQuery uploadify를 사용하여 파일을 내 컨트롤러에 업로드하고 있습니다.C# MVC3에서 MPX .net을 사용하여 .mpp 파일을 읽는 방법은 무엇입니까?

내 문제는 내 HttpPostedFileBase 파일에서 ProjectFile을 읽는 방법입니다. = Request.Files [0]; file.FileName에 브라우저 보안의 일부로 파일의 전체 경로가 포함되어 있지 않기 때문에 파일을 읽을 때 예외가 발생합니다. 만약 내가 좋았거나 적어도 Java에 대한 지식이 있다면, ProjectReader.read가 지원하는 유효한 매개 변수 중 하나이기 때문에 게시 된 파일을 java.io.file로 변환합니다.

아래 코드는 제가 가지고있는 코드입니다 (스레드의 코드는 Example of MPXJ library in C#입니다).

[HttpPost] 
public JsonResult UploadTask(int ProjectType) 
    { 
     try 
     { 
      HttpPostedFileBase file = Request.Files[0]; 
      MpxjReader.ProjectReader mppReader = MpxjReader.ProjectReaderUtility.getProjectReader(file.FileName); 
      Mpxj.ProjectFile mpp = mppReader.read(file.FileName); 

      List tables = mpp.getTables(); 
      Iterator iter = tables.iterator(); 
      while (iter.hasNext()) 
      { 
       MpxjCore.Table table = (MpxjCore.Table)iter.next(); 
       if (table.getResourceFlag()) 
       { 
        List resources = mpp.getAllResources(); 
        Iterator resourceIter = resources.iterator(); 
        while (resourceIter.hasNext()) 
        { 
         MpxjCore.Resource resource = (MpxjCore.Resource)iter.next(); 
         List columns = table.getColumns(); 
         Iterator columnIter = columns.iterator(); 
         while (columnIter.hasNext()) 
         { 
          MpxjCore.Column column = (MpxjCore.Column)columnIter.next(); 
          Object columnValue = resource.getCachedValue(column.getFieldType()); 
          Console.Write(columnValue); 
          Console.Write(","); 
         } 
         Console.WriteLine(); 
        } 
       } 
       else 
       { 
        List tasks = mpp.getAllTasks(); 
        // etc. as above 
       } 
      } 

      return Json(new { data = "success" }, JsonRequestBehavior.AllowGet); 
     } 
     catch 
     { 
      return Json(new { data = "error" }, JsonRequestBehavior.AllowGet); 
     } 
    } 

도움을 주시면 감사하겠습니다.

+0

위의 주석을 대답으로 전송하고 답변을 동의로 표시해 주시겠습니까? 앞으로 비슷한 문제를 가진 다른 사람들이 귀하의 경험을 통해 도움을 얻을 수 있습니다. 많은 감사합니다! Jon –

+0

Ok @JonIles ... 감사합니다. – dmc

답변

0

업데이트 : .MPP 파일을 지정된 디렉터리에 저장 한 후이 디렉터리에서 읽은 다음 (서버에서 배포 할 때 문제가되는 방법) 문제가 이미 해결되었습니다.

0

파일 시스템에 파일을 저장하지 않아도되므로 파일 시스템을 관리 할 필요가 없습니다. 다음 코드를 사용하여 업로드 된 파일을 직접 읽을 수 있습니다.

public ActionResult LoadProject(HttpPostedFileBase file) 
{ 
    // Read file content into byte[] 
    var buffer = new byte[file.InputStream.Length]; 
    file.InputStream.Read(buffer, 0, (int) file.InputStream.Length);          

    // Read the content using a new 'java' inputStream 
    var reader = new MPPReader();         
    var project = reader.Read(new java.io.ByteArrayInputStream(buffer)); 

    // ... 
} 
+0

안녕하세요 @Farlop, 나는 [IKVM] (http://www.ikvm.net/)을 사용하여 HttpPostedFileBase에서 java.io로 직접 변환하는 방법을 알고 있습니다. 제발 내 대답을 참조하십시오. – admin

0

나는 당신에게 시달 렸지만 성능 문제가 있습니다. 응용 프로그램의 성능을 향상 시키려면 아래와 같이 구현할 수 있습니다.

public ActionResult Upload(HttpPostedFileBase files) 
{ 
    ProjectReader reader = new MPPReader(); 
    ProjectFile projectObj = reader.read(new ikvm.io.InputStreamWrapper(files.InputStream)); 
}