Skip to main content

Ftp File Upload Using C#

using System.Security.Principal;
using Microsoft.Win32.SafeHandles;
using System.Dynamic;
using System.Reflection.Metadata.Ecma335;
using System.Reflection.Metadata;
using System.Text;
using System.Runtime.CompilerServices;
using System.Net.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mime;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using UploadFileToIOPPFTP.Models;
using System.IO;
using System.Net;
using Microsoft.AspNetCore.Authorization;
using System.IO.Compression;
using System.Net.Http.Headers;
using System.Text.Json;
using MovejobtoWms.Helpers;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using RestSharp;
using Newtonsoft.Json.Linq;
using WinSCP;

namespace UploadFileToIOPPFTP.Controllers
{
    [Authorize(AuthenticationSchemes = "CustomAuthentication")]
    [Route("api/[controller]/{action}")]
    [ApiController]

    public class UploadFileToIOPPFTPController : ControllerBase
    {


        HttpClient client = new HttpClient();

        private readonly UploadFileToFtpContext _context;
        //private IUserService _userService;
        private readonly IConfiguration _configuration;
        public UploadFileToIOPPFTPController(UploadFileToFtpContext contextIConfiguration configuration)
        {
            _context = context;
            _configuration = configuration;

            //   _userService = userService;

        }

        [HttpGet]
        public String TestMessage()
        {
            return "Welcome to IOPPFileUploadIDispatch Api I am Working Fine!";
        }

        // POST: api/MoveJobtoWms/
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see https://aka.ms/RazorPagesCRUD.

        [HttpPost]
        [Consumes(MediaTypeNames.Application.Json)]
        [ProducesResponseType(201)]
        [ProducesResponseType(200)]
        [ProducesResponseType(400)]
        [ProducesResponseType(500)]
        [ProducesResponseType(401)]

        public async Task<IActionResultUploadFileToFtpBase(RequestBase requestBase)
        {
            string FtpUploadPath;
            List<RequestBase.StagesRevisesstageids = new List<RequestBase.Stages> { RequestBase.Stages.Revises1RequestBase.Stages.Revises2RequestBase.Stages.Revises3RequestBase.Stages.Revises4RequestBase.Stages.Firstproof }; //for Revises stages in IOPP
            string FitpDetail = string.Empty;
            string sError = string.Empty;
            var FtpDetails = new FtpDetails();
            // bool isFinal = false;
            if (requestBase.stageid == (int)RequestBase.Stages.PreEditing || requestBase.stageid == (int)RequestBase.Stages.Copyediting || Revisesstageids.Contains((RequestBase.Stages)requestBase.stageid))

                FtpDetails = await _context.FtpDetails.FirstOrDefaultAsync(x => x.FTPName == _configuration["LiveFileUploadPathIOPP"]);
            else
                FtpDetails = await _context.FtpDetails.FirstOrDefaultAsync(x => x.FTPName == _configuration["FinalFileUploadPathIOPP"]);
            if (requestBase.stageid == (int)RequestBase.Stages.PreEditing)
            {
                FtpUploadPath = _configuration["FtpPreEdited"];
            }
            else if (Revisesstageids.Contains((RequestBase.Stages)requestBase.stageid))
            {
                FtpUploadPath = _configuration["FtpProof"];
            }
            else if (requestBase.stageid == (int)RequestBase.Stages.Copyediting)
            {
                FtpUploadPath = _configuration["FtpEditedSource"];
            }
            else
            {
                //isFinal = true;
                FtpUploadPath = _configuration["FtpFinals"];
            }
            // var fileName = Path.GetFileName(requestBase.Inpath.Replace("/", "\\"));
            // var folderName = Path.GetFileNameWithoutExtension(fileName);

            //Ftp Upload Path Client 
            try
            {
                FtpUploadPath = FtpUploadPath.Replace("bookname"requestBase.BookName).Replace("articleid"requestBase.articleId);

                var fileDetail = _context.FileDetails.FirstOrDefault(x => x.fileName == requestBase.articleId);
                //  var pgcount=new FilePropertyDetail();
                // if (FtpUploadPath.ToLower().Contains("proof"))
                // {
                //      pgcount = _context.FilePropertyDetails.FirstOrDefault(x => x.fileId == fileDetail.fileID && x.value2 == requestBase.stageid.ToString() && x.id == 196);
                // }


                //  int pagecnt = 6;
                if (UploadFileToFtpClient(requestBase.InpathFtpUploadPathFtpDetails.HostNameFtpDetails.PortNumberFtpDetails.UserNameFtpDetails.Passwordref sError))
                {

                    if (requestBase.stageid == (int)RequestBase.Stages.PreEditing && requestBase.WmsId == (int)RequestBase.Wmsids.IOPP)
                    {

                        if (CallAPI(requestBase.urlrequestBase.journalAcronymrequestBase.articleIdrequestBase.taskNamerequestBase.urlTyperef sError))
                        {
                            return StatusCode(200new { is_success = truedata = ""message = "Success" });
                        }
                        else
                        {
                            return StatusCode(200new { is_success = falsedata = ""message = sError });
                        }
                    }
                    else
                    {
                        return StatusCode(200new { is_success = truedata = ""message = sError });
                    }
                    //return StatusCode(200, new { is_success = true, data = "", message = "Success" });


                }

                else
                {
                    return StatusCode(200new { is_success = falsedata = ""message = sError });
                }
            }
            catch (Exception ex)
            {
                return StatusCode(500new { is_success = falsedata = ""message = ex.Message.ToString() });
            }


        }
        [NonAction]
        public bool CallAPI(string Urlstring journalAcronymstring articleIdstring taskNamestring urlTyperef string s_Error)
        {

            var responseDetail = new ProtanResponse
            {
                url = Url,
                journalAcronym = journalAcronym,
                articleId = articleId,
                taskName = taskName,
                urlType = urlType
            };
            string Token = _configuration["ProtanApiToken"];
            string Username = _configuration["ProtanApiUsrName"];
            string Password = _configuration["ProtanApiPassword"];

            var client = new RestClient(_configuration["ProtanApiUri"]);
            var request = new RestRequest(Method.POST);
            request.AddHeader("iauthor-token"Token);
            request.AddHeader("authorization"GetAuthorization(UsernamePassword));
            request.AddHeader("content-type""application/json");
            // String.Format("{\"url\":\"{0}\",\"journalAcronym\":\"{1}\",\"articleId\":\"{2}\",\"taskName\":\"{3}\",\"urlType\":\"{4}\"}", Url, journalAcronym, articleId, taskName, urlType)
            request.AddParameter("application/json"JsonConvert.SerializeObject(responseDetail), ParameterType.RequestBody);

            IRestResponse response = client.Execute(request);

            var ProtanResponse = JObject.Parse(response.Content);

            if (ProtanResponse.GetValue("status").ToString() == "success")
                return true;
            else
                s_Error = ProtanResponse.GetValue("status").ToString();
            return false;
        }
        [NonAction]
        private string GetAuthorization(string Usernamestring Password)
        {
            String authString = Username + ":" + Password;
            return "Basic " + Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(authString)).ToString();
        }
        [NonAction]
        private static bool UploadFileToFtpClient(List<stringFilespathstring outpathstring _addressint _portstring _usernamestring _passwordref string sError)
        {
            bool isfileuploadSuccess = false;
            bool isfileExist = false;
            string constructedPath = "/";
            string[] remoteDir = null;
            Session session = null;


            try
            {

                foreach (var Filepath in Filespath)
                {


                    // if (outpath.Contains("Proof"))
                    // {
                    //     outpath = Path.GetDirectoryName(outpath).Replace("\\", "/") + "/" + Path.GetFileNameWithoutExtension(Filepath) + "p" + pgcount + Path.GetExtension(Filepath); //for Firstproof Stage  alone
                    // }
                    // else
                    // {
                    outpath = Path.GetDirectoryName(outpath).Replace("\\""/") + "/" + Path.GetFileName(Filepath);
                    //}

                    if (_port == 22)
                    {

                        session = new Session();
                        SessionOptions sessionOptions = new SessionOptions();
                        sessionOptions.Protocol = Protocol.Sftp;
                        sessionOptions.HostName = _address;
                        sessionOptions.UserName = _username;
                        sessionOptions.Password = _password;
                        // 
                        sessionOptions.SshHostKeyFingerprint = session.ScanFingerprint(sessionOptions"SHA-256");
                        session.Open(sessionOptions);
                        TransferOptions transferOptions = new TransferOptions();
                        transferOptions.TransferMode = TransferMode.Binary;
                        TransferOperationResult transferResult;
                        //This is for Getting/Downloading files from SFTP  
                        //  transferResult = session.GetFiles( "", destinationFtpUrl, false, transferOptions);
                        //This is for Putting/Uploading file on SFTP
                        // if (session.FileExists(outpath))
                        // {

                        // }
                        // else
                        // {
                        //     session.CreateDirectory(Path.GetDirectoryName(outpath).Replace("\\", "/"));
                        // }

                        remoteDir = Path.GetDirectoryName(outpath).Replace("\\""/").Split('/');
                        //creating Folders in Remote Path 
                        for (int i = 0i < remoteDir.Lengthi++)
                        {
                            constructedPath = constructedPath + "/" + remoteDir[i];
                            isfileExist = session.FileExists(constructedPath);
                            if (!isfileExist)
                                session.CreateDirectory(constructedPath);

                        }

                        transferResult = session.PutFiles(Filepath.Replace("/"@"\"), outpathfalsetransferOptions);
                        if (transferResult.IsSuccess)
                        {
                            isfileuploadSuccess = true;
                        }
                        else
                        {
                            sError = transferResult.Failures[0].ToString();
                            isfileuploadSuccess = false;
                        }
                    }
                    else
                    {
                        //Session session = new Session();
                        session = new Session();
                        SessionOptions sessionOptions = new SessionOptions();
                        sessionOptions.Protocol = Protocol.Ftp;
                        sessionOptions.HostName = _address;
                        sessionOptions.UserName = _username;
                        sessionOptions.Password = _password;
                        // 
                        // sessionOptions.SshHostKeyFingerprint = session.ScanFingerprint(sessionOptions, "SHA-256");
                        session.Open(sessionOptions);
                        TransferOptions transferOptions = new TransferOptions();
                        transferOptions.TransferMode = TransferMode.Binary;
                        TransferOperationResult transferResult;
                        //This is for Getting/Downloading files from SFTP  
                        //  transferResult = session.GetFiles( "", destinationFtpUrl, false, transferOptions);
                        //This is for Putting/Uploading file on SFTP  
                        // if (!session.FileExists(outpath))
                        // {

                        // }
                        // else
                        // {
                        //     session.CreateDirectory(Path.GetDirectoryName(outpath).Replace("\\", "/"));
                        // }

                        for (int i = 0i < remoteDir.Lengthi++)
                        {
                            constructedPath = constructedPath + "/" + remoteDir[i];
                            isfileExist = session.FileExists(constructedPath);
                            if (!isfileExist)
                                session.CreateDirectory(constructedPath);

                        }

                        transferResult = session.PutFiles(Filepath.Replace("/""\\"), outpathfalsetransferOptions);
                        if (transferResult.IsSuccess)
                        {
                            isfileuploadSuccess = true;
                        }
                        else
                        {
                            sError = transferResult.Failures[0].ToString();
                            isfileuploadSuccess = false;
                        }
                        // outpath = Path.GetDirectoryName(outpath).Replace("\\", "/") + "/" + Path.GetFileName(Filepath);
                        // var to_uri = "ftp://" + _address + outpath;
                        // //to Create Directory if not     Exist



                        // var remoteDirExist = FtpDirectoryExists("ftp://" + _address + Path.GetDirectoryName(outpath).Replace("\\", "/"), _username, _password, ref sError);

                        // if (!remoteDirExist)
                        // {

                        //     FtpWebRequest Dirrequest = (FtpWebRequest)WebRequest.Create("ftp://" + _address + Path.GetDirectoryName(outpath).Replace("\\", "/"));
                        //     Dirrequest.Credentials = new NetworkCredential(_username, _password);
                        //     Dirrequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                        //     Dirrequest.UsePassive = false;
                        //     Dirrequest.Proxy = null;
                        //     FtpWebResponse response = (FtpWebResponse)Dirrequest.GetResponse();
                        // }

                        // // if (remoteDirExist)
                        // // {
                        // //     
                        // FtpWebRequest request = (FtpWebRequest)WebRequest.Create(to_uri);

                        // request.Method = WebRequestMethods.Ftp.UploadFile;
                        // request.UsePassive = true;
                        // request.Proxy = null;
                        // // Get network credentials.
                        // request.Credentials = new NetworkCredential(_username, _password);



                        // // Read the file's contents into a byte array.
                        // byte[] bytes = System.IO.File.ReadAllBytes(Filepath);

                        // // Write the bytes into the request stream.
                        // request.ContentLength = bytes.Length;
                        // using (Stream request_stream = request.GetRequestStream())
                        // {
                        //     request_stream.Write(bytes, 0, bytes.Length);
                        //     request_stream.Close();

                        // }

                    }
                }

            }
            catch (Exception ex)
            {
                sError = ex.Message.ToString();
                return false;

            }
            return isfileuploadSuccess;
        }
        [NonAction]
        private static bool FtpDirectoryExists(string directoryPathstring ftpUserstring ftpPasswordref string SException)
        {
            bool IsExists = true;
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(directoryPath);
                request.Credentials = new NetworkCredential(ftpUserftpPassword);
                request.UsePassive = true;
                request.Proxy = null;
                request.Method = WebRequestMethods.Ftp.ListDirectory;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();


            }
            catch (Exception ex)
            {
                SException = ex.Message.ToString();
                IsExists = false;
            }
            return IsExists;
        }
    }
}

Comments

Popular posts from this blog

Vb Net reference for JSon Extraction of String to Json .

 Public Shared Function SupplementaryUpload(ByVal ICMSIntegrationID As String, ByVal CMSActivityID As String, ByVal File As String, ByVal Flag As String, ByRef ErrorResponse As String) As Boolean         Try             'Dim client As New RestSharp.RestClient()             ' Dim BMJ_LinkUpload As String = ConfigurationManager.AppSettings("BMJ_API_Upload")             Dim BMJ_LinkUpload As String = "http://is-s2130:5000/BMJIntegration/SupplementaryUpload"             'client.BaseUrl = New Uri(BMJ_LinkUpload & "?ICMSIntegrationID=" & ICMSIntegrationID & "& CMSActivityID=" & CMSActivityID & "&File=" & File & "&Flag=" & Flag)             '''?ICMSIntegrationID=56445096&CMSActivityID=29&File=D:\admin.JPG&Flag=article_resource")         ...

Hosting multiple Environments

using   System ; using   System . Collections . Generic ; using   System . Linq ; using   System . Threading . Tasks ; using   Microsoft . AspNetCore . Builder ; using   Microsoft . AspNetCore . Hosting ; using   Microsoft . AspNetCore . HttpsPolicy ; using   Microsoft . AspNetCore . Mvc ; using   Microsoft . Extensions . Configuration ; using   Microsoft . Extensions . DependencyInjection ; using   Microsoft . Extensions . Hosting ; using   Microsoft . Extensions . Logging ; using   Microsoft . EntityFrameworkCore ; using   MovejobtoWms . Models ; using   Microsoft . AspNetCore . Authentication . Cookies ; using   Microsoft . AspNetCore . Authentication ; using   Newtonsoft . Json ; using   Microsoft . AspNetCore . Http ; using   System . Net . Http . Headers ; namespace   MovejobtoWms {      public   class   Star...

Code Example Zip File Extraction and Download in dotnet core api

using   System . Security . Principal ; using   Microsoft . Win32 . SafeHandles ; using   System . Dynamic ; using   System . Reflection . Metadata . Ecma335 ; using   System . Reflection . Metadata ; using   System . Text ; using   System . Runtime . CompilerServices ; using   System . Net . Http ; using   System ; using   System . Collections . Generic ; using   System . Linq ; using   System . Net . Mime ; using   System . Threading . Tasks ; using   Microsoft . AspNetCore . Http ; using   Microsoft . AspNetCore . Mvc ; using   Microsoft . EntityFrameworkCore ; using   MovejobtoWms . Models ; using   System . IO ; using   System . Net ; using   Microsoft . AspNetCore . Authorization ; using   System . IO . Compression ; using   System . Net . Http . Headers ; using   System . Net . Http . Formatting ; using   System ...