public ResultModel ConvertFile(ConversionDto conversionDto)
        {
            var fileNames = _storageRepository.ParseNames(conversionDto.sessionId);

            if (fileNames == null)
            {
                return(ResultModel.Error(fileNames.Id, "Invalid session id", 400));
            }
            return(OpConvert.Measure(fileNames.Id, () =>
            {
                FileFormat fmt;
                if (conversionDto.outputType != null && formats.TryGetValue(conversionDto.outputType, out fmt))
                {
                    SceneImportContext importContext = CreateLoadContext(fileNames);
                    //User uploaded an unsupported file format.
                    if (importContext.SourceFormat == null)
                    {
                        _logger.LogError("Failed to detect file type from file {0}", fileNames.Id);
                        return ResultModel.Error(fileNames.Id, "Unsupported input file", 400);
                    }

                    Scene scene;
                    try
                    {
                        scene = importContext.LoadScene();
                    }
                    catch (Exception e)
                    {
                        _logger.LogError(e, "Failed to open input file {0}", fileNames.Id);
                        OperationFailed(e);
                        return ResultModel.Error(fileNames.Id, "Internal server error", 500);
                    }
                    var originalFile = importContext.MainFile;
                    try
                    {
                        var fileName = fileNames[OutputFile];
                        using (var stream = LimitedStream.CreateFile(fileName, MaximumOutputSize))
                        {
                            scene.Save(stream, fmt);
                        }
                    }
                    catch (Exception e)
                    {
                        var msg = "Internal server error";
                        if (e is ExportException)
                        {
                            msg = e.Message;
                        }
                        _logger.LogError(e, "Failed to save converted file to {0}", fileNames[SourceFile]);
                        OperationFailed(e);
                        return ResultModel.Error(fileNames.Id, msg, 500);
                    }
                    var newFileName = Path.ChangeExtension(originalFile, fmt.Extension);
                    importContext.MetaData.OutputFile = newFileName;
                    SetMetaData(fileNames, importContext.MetaData);
                    return ResultModel.Ok(true);
                }
                return ResultModel.Error(fileNames.Id, "Output type not found", 400);
            }));
        }
        public ResultModel UploadIForm([FromForm] IFormCollection formData)
        {
            IFormFileCollection files = formData.Files;
            int fileCount             = files.Count;

            if (files == null || fileCount == 0)
            {
                return(ResultModel.Error("file can't be null!", 400));
            }
            var fileNames = _storageRepository.NewNames();

            return(OpUpload.Measure(fileNames.Id, () =>
            {
                try
                {
                    SaveUploadedFiles(fileNames, files);
                }
                catch (Exception e)
                {
                    OperationFailed(e);
                    return ResultModel.Error(fileNames.Id, e.Message, 400);
                }
                return ResultModel.Ok(fileNames.Id);
            }));
        }
Example #3
0
        public ResultObject UploadFile([FromForm] IFormCollection formData)
        {
            var files = formData.Files;

            if (files == null || files.Count == 0)
            {
                return(new ResultObject
                {
                    state = "Fail",
                    resultObject = "files==null"
                });
            }

            var file             = files[0];
            var originalFileName = Path.GetFileName(file.FileName);
            var fileNames        = _storageRepository.NewNames();

            return(OpUpload.Measure(fileNames.Id, () =>
            {
                try
                {
                    SaveUploadedFiles(fileNames, files);
                }
                catch (Exception e)
                {
                    return new ResultObject
                    {
                        state = "Fail",
                        resultObject = "Server error",
                        sessionId = fileNames.Id
                    };
                }


                try
                {
                    HashSet <string> s = DiagnoseResult(fileNames);
                    _logger.LogInformation("File analyzed, id = " + fileNames.Id);
                    return new ResultObject
                    {
                        state = "Success",
                        types = s,
                        sessionId = fileNames.Id,
                    };
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Failed to diagnose result from input file, session id = {0}", fileNames.Id);
                    OperationFailed(e);
                    return new ResultObject
                    {
                        state = "Fail",
                        resultObject = "Server error",
                        sessionId = fileNames.Id
                    };
                }
            }));
        }
Example #4
0
        public IActionResult Fileres(string sessionId)
        {
            var fileNames = _storageRepository.ParseNames(sessionId);

            if (fileNames == null || FileIO.Exists(fileNames[ReviewFile]) == false)
            {
                return(NotFound());
            }
            return(OpReview.Measure(fileNames.Id, () =>
            {
                var reviewFile = fileNames[ReviewFile];
                return PhysicalFile(reviewFile, "application/octet-stream", "review.a3dw");
            }));
        }
Example #5
0
        public ResultObject UploadIForm([FromForm] IFormCollection formData)
        {
            IFormFileCollection files = formData.Files;
            int fileCount             = files.Count;

            if (files == null || fileCount == 0)
            {
                return(new ResultObject
                {
                    state = "Fail",
                    resultObject = "files==null"
                });
            }
            var file             = files[0];
            var originalFileName = Path.GetFileName(file.FileName);
            var fileNames        = _storageRepository.NewNames();

            return(OpUpload.Measure(fileNames.Id, () =>
            {
                try
                {
                    SaveUploadedFiles(fileNames, files);
                    var ctx = CreateLoadContext(fileNames);
                    var scene = ctx.LoadScene();
                    var opt = new A3DWSaveOptions();
                    opt.ExportMetaData = true;
                    scene.AssetInfo.SetProperty("OriginalFileName", ctx.MainFile);
                    scene.Save(fileNames[ReviewFile], opt);
                    _logger.LogInformation("File analyzed, id = " + fileNames.Id);
                    return new ResultObject
                    {
                        state = "Success",
                        sessionId = fileNames.Id
                    };
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Failed to diagnose result from input file, session id = {0}", fileNames.Id);
                    OperationFailed(e);
                    return new ResultObject
                    {
                        state = "Fail",
                        resultObject = "Server error",
                        sessionId = fileNames.Id
                    };
                }
            }));
        }
Example #6
0
        public IActionResult Download(string sessionId)
        {
            var fileNames = _storageRepository.ParseNames(sessionId);

            if (fileNames == null)
            {
                return(NotFound());
            }
            return(OpDownload.Measure <IActionResult>(fileNames.Id, () =>
            {
                var ctx = CreateLoadContext(fileNames);
                var path = ctx.PhysicalMainFile;
                if (FileIO.Exists(path) == false)
                {
                    return NotFound();
                }
                return PhysicalFile(path, "application/octet-stream", ctx.MainFile);
            }));
        }
        public ResultModel SendEmail(string address, string url)
        {
            return(OpEmail.Measure(url, () =>
            {
                var uid = _configuration["SystemConfig:uid"];
                var pwd = _configuration["SystemConfig:MailServerPassword"];
                var applicationUrl = _configuration["SystemConfig:applicationUrl"];
                var fromEmail = _configuration["SystemConfig:FromAddress"];
                var MailServer = _configuration["SystemConfig:MailServer"];
                var MailServerPort = _configuration["SystemConfig:MailServerPort"];

                try
                {
                    MailAddress from = new MailAddress(fromEmail);
                    MailAddress to = new MailAddress(address);
                    MailMessage mailMessage = new MailMessage(from, to);
                    string strbody = ReplaceText("Free Converter App for 3D File Formats ", "Your file has been converted successfully", applicationUrl + "/api/conversion/download/" + url);
                    mailMessage.Subject = "Download File";
                    mailMessage.Body = strbody;
                    mailMessage.IsBodyHtml = true;
                    SmtpClient smtpClient = new SmtpClient();

                    smtpClient.UseDefaultCredentials = false;
                    smtpClient.Host = MailServer;
                    smtpClient.Port = int.Parse(MailServerPort);
                    smtpClient.EnableSsl = true;

                    smtpClient.Credentials = new NetworkCredential(uid, pwd);
                    smtpClient.Send(mailMessage);

                    _logger.LogInformation("Send file {0} to {1}", url, address);

                    return ResultModel.Ok();
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Failed to send email");
                    OperationFailed(e);
                    return ResultModel.Error("send Error", 500);
                }
            }));
        }
        public IActionResult DownloadFile(string sessionId)
        {
            var fileNames = _storageRepository.ParseNames(sessionId);

            if (fileNames == null)
            {
                return(NotFound());
            }
            return(OpDownload.Measure <IActionResult>(fileNames.Id, () =>
            {
                string path = fileNames[OutputFile];
                if (FileIO.Exists(path) == false)
                {
                    return NotFound();
                }
                var metaData = GetMetaData(fileNames);
                var outputFile = metaData.OutputFile;
                return PhysicalFile(path, "application/octet-stream", outputFile);
            }));
        }
Example #9
0
        public IActionResult DownloadResult(string type, string resultType, string sessionId)
        {
            var outputFormat = GetFileFormat(type);

            if (outputFormat == null)
            {
                return(NotFound());
            }
            var fileNames = _storageRepository.ParseNames(sessionId);

            if (fileNames == null || !FileIO.Exists(fileNames[AnalyzeResult]))
            {
                return(NotFound());
            }

            return(OpRepair.Measure <IActionResult>(fileNames.Id, () =>
            {
                if (!string.IsNullOrEmpty(resultType))
                {
                    var issuesToRepair = ParseIssues(resultType);
                    using (var fs = FileIO.OpenRead(fileNames[AnalyzeResult]))
                    {
                        SceneDiagnoser sd;
                        try
                        {
                            sd = SceneDiagnoser.LoadFromStream(fs);
                        }
                        catch (Exception e)
                        {
                            _logger.LogError(e, "Failed to restore the diagnosing result, session id = {0}", sessionId);
                            OperationFailed(e);
                            return this.Problem("Internal server error");
                        }
                        Mesh result;
                        try
                        {
                            result = sd.Repair(issuesToRepair);
                        }
                        catch (Exception e)
                        {
                            _logger.LogError(e, "Failed to repair the input mesh, session id = {0}", sessionId);
                            OperationFailed(e);
                            return this.Problem("Internal server error");
                        }
                        try
                        {
                            Scene scene = new Scene(result);
                            scene.Save(fileNames[RepairedFile], outputFormat);
                        }
                        catch (Exception e)
                        {
                            _logger.LogError(e, "Failed to save the repaired result, session id = {0}", sessionId);
                            OperationFailed(e);
                            return this.Problem("Internal server error");
                        }
                    }
                }
                else
                {
                    //No issues were selected, just make a direct conversion.
                    try
                    {
                        Scene scene = OpenInput(fileNames);
                        scene.Save(fileNames[RepairedFile], outputFormat);
                    }
                    catch (Exception e)
                    {
                        _logger.LogError(e, "Failed to save to the required type, session id = {0}", sessionId);
                        OperationFailed(e);
                        return this.Problem("Internal server error");
                    }
                }
                if (!FileIO.Exists(fileNames[RepairedFile]))
                {
                    return NotFound();
                }
                try
                {
                    var path = fileNames[RepairedFile];
                    string downfile = Guid.NewGuid().ToString();
                    return PhysicalFile(path, "application/octet-stream", downfile + "." + type);
                }
                catch (Exception e)
                {
                    OperationFailed(e);
                    return NotFound();
                }
            }));
        }