public async Task <IHttpActionResult> Novo() { //Verifica se há um usuário válido logado. ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user == null) { return(Unauthorized()); } // Checar se o request é multipart/form-data. if (!Request.Content.IsMimeMultipartContent("form-data")) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } //Processo de leitura do arquivo// string root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider = new MultipartFormDataStreamProvider(root); await Request.Content.ReadAsMultipartAsync(provider); string CategoryID = provider.FormData["categoryId"]; string CSVTags = provider.FormData["tags"]; string Filename = provider.FormData["filename"]; //Análise e estruturação do arquivo TextParser parser = new TextParser(); byte[] binaryData = File.ReadAllBytes(provider.FileData[0].LocalFileName); Node fbxFile; try { fbxFile = parser.ParseFromStream(new MemoryStream(binaryData)); } catch (Exception ex) { return(BadRequest("Arquivo FBX inválido. - " + ex.Message)); } //Carregamento da lista de objetos existentes no arquivo var objects = new List <FBXObject>(); foreach (Property prop in (fbxFile.Properties.First(d => d.Name == "Objects").Value as Node).Properties) { var obj = FBXObject.GetFBXObjectFromObjectNode(prop.Value as Node); objects.Add(obj); } //Pega todas as conexões existentes e seus objetos. FBXObject rootNode = new FBXObject() { UID = "0", Name = "Root" }; var connections = FBXConnection.GetConnectionsFromConnectionNode(fbxFile.Properties. First(D => D.Name == "Connections").Value as Node, objects, rootNode).ToList(); //Objeto final a ser armazenado contendo estrutura, objetos e conexões Final final = new Final(connections, objects, fbxFile); MemoryStream memory = new MemoryStream(); (new BinaryFormatter()).Serialize(memory, final); //Dado a ser guardado no banco var file = new Files() { Id = Guid.NewGuid().ToString(), BinaryFile = binaryData, ApplicationUser = db.Users.First(d => d.Id == user.Id), Name = Filename, FinalInformation = memory.GetBuffer(), Category = db.Categories.First(d => d.Id == CategoryID), UpdateDateTime = DateTime.Now }; db.Files.Add(file); db.SaveChanges(); SaveTagsForFile(CSVTags, file); SaveContentsForFile(final, file); db.SaveChanges(); return(Ok(file.Id)); }
// $ANTLR end "list" // $ANTLR start "objectDeclaration" // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:93:1: objectDeclaration[string id] returns [FBXDeclarationNode dec] : ( (name= STRING ( COMMA type= STRING )? | index= NUMBER ) )? LCURLY (node= declaration )* RCURLY ; public FBXDeclarationNode objectDeclaration(string id) // throws RecognitionException [1] { FBXDeclarationNode dec = null; IToken name = null; IToken type = null; IToken index = null; FBXDeclarationNode node = null; try { // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:2: ( ( (name= STRING ( COMMA type= STRING )? | index= NUMBER ) )? LCURLY (node= declaration )* RCURLY ) // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:4: ( (name= STRING ( COMMA type= STRING )? | index= NUMBER ) )? LCURLY (node= declaration )* RCURLY { // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:4: ( (name= STRING ( COMMA type= STRING )? | index= NUMBER ) )? int alt8 = 2; int LA8_0 = input.LA(1); if ((LA8_0 == NUMBER || LA8_0 == STRING)) { alt8 = 1; } switch (alt8) { case 1: // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:6: (name= STRING ( COMMA type= STRING )? | index= NUMBER ) { // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:6: (name= STRING ( COMMA type= STRING )? | index= NUMBER ) int alt7 = 2; int LA7_0 = input.LA(1); if ((LA7_0 == STRING)) { alt7 = 1; } else if ((LA7_0 == NUMBER)) { alt7 = 2; } else { NoViableAltException nvae_d7s0 = new NoViableAltException("", 7, 0, input); throw nvae_d7s0; } switch (alt7) { case 1: // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:8: name= STRING ( COMMA type= STRING )? { name = (IToken)Match(input, STRING, FOLLOW_STRING_in_objectDeclaration542); // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:20: ( COMMA type= STRING )? int alt6 = 2; int LA6_0 = input.LA(1); if ((LA6_0 == COMMA)) { alt6 = 1; } switch (alt6) { case 1: // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:21: COMMA type= STRING { Match(input, COMMA, FOLLOW_COMMA_in_objectDeclaration545); type = (IToken)Match(input, STRING, FOLLOW_STRING_in_objectDeclaration549); } break; } } break; case 2: // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:94:43: index= NUMBER { index = (IToken)Match(input, NUMBER, FOLLOW_NUMBER_in_objectDeclaration559); } break; } if (name != null) { dec = new FBXObject(name.Text, type != null? type.Text : null); } else { dec = new FBXObject(); } dec.Type = id; if (index != null) { ((FBXObject)dec).Index = int.Parse(index.Text); } } break; } Match(input, LCURLY, FOLLOW_LCURLY_in_objectDeclaration570); // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:105:4: (node= declaration )* do { int alt9 = 2; int LA9_0 = input.LA(1); if ((LA9_0 == ID)) { alt9 = 1; } switch (alt9) { case 1: // E:\\DEVELOP\\Visual Studio Projects\\Vsual Studio 2010\\GameEngineSlimDX\\GEngine\\ResourcesManagers\\FBXParser\\fbx.g:105:10: node= declaration { PushFollow(FOLLOW_declaration_in_objectDeclaration583); node = declaration(); state.followingStackPointer--; if (dec == null) { dec = new FBXObject(); dec.Type = id; } ((FBXObject)dec).Add(node); } break; default: goto loop9; } } while (true); loop9: ; // Stops C# compiler whining that label 'loop9' has no statements Match(input, RCURLY, FOLLOW_RCURLY_in_objectDeclaration599); if (dec == null) { dec = new FBXObject(); dec.Type = id; } } } catch (RecognitionException re) { ReportError(re); Recover(input, re); } finally { } return(dec); }