public IActionResult DownloadFile(string q)
        {
            var fullPath = GetSafePath(q);

            var rangeStart = GetByteOffset();

            long fileLength = new FileInfo(fullPath).Length;
            var  fileStream = new EncryptStream(() => new FileStream(fullPath, FileMode.Open), this.coreEncryption, (rangeStart ?? 0) % 512);

            if (rangeStart == null)
            {
                Response.Headers.Add("Content-Length", fileLength.ToString());
            }
            else
            {
                long startbyte = rangeStart.Value;

                fileStream.Position = startbyte;

                Response.StatusCode = 206;
                Response.Headers.Add("Content-Length", (fileLength - startbyte).ToString());
                string contentRange = string.Format("bytes {0}-{1}/{2}", startbyte, fileLength - 1, fileLength);
                Response.Headers.Add("Content-Range", contentRange);
            }

            Response.Headers.Add("Accept-Ranges", "bytes");

            return(File(fileStream, "application/unknown", fileNameHelper.CreateAlternativeFileName(q) + extension));
        }