예제 #1
0
        public ActionResult GetFTPPathContents(FTPCredentials credentials, string path)
        {
            using (var sftp = new SftpClient(credentials.Address, credentials.Port, credentials.Login, credentials.Password))
            {
                try
                {
                    sftp.Connect();
                    var results = sftp.ListDirectory(path);

                    return(Json(results.Where(r => r.Name != "." && r.Name != "..").Select(r => new FTPItems
                    {
                        Name = r.Name,
                        Path = r.FullName,
                        Type = r.IsDirectory ? ItemTypes.Folder : ItemTypes.File
                    })));
                }
                finally
                {
                    if (sftp.IsConnected)
                    {
                        sftp.Disconnect();
                    }
                }
            }
        }
예제 #2
0
        public async Task <ActionResult> LoadFTPFiles(FTPCredentials credentials, Guid requestId, IEnumerable <string> paths)
        {
            List <Document> uploadedDocuments = new List <Document>();

            using (var sftp = new SftpClient(credentials.Address, credentials.Port, credentials.Login, credentials.Password))
            {
                try
                {
                    sftp.Connect();
                    foreach (var path in paths)
                    {
                        var fileInfo = sftp.Get(path);
                        using (var sSource = sftp.OpenRead(path))
                        {
                            using (var db = new DataContext())
                            {
                                var document = new Document
                                {
                                    CreatedOn = DateTime.UtcNow,
                                    FileName  = fileInfo.Name,
                                    ItemID    = requestId,
                                    Length    = fileInfo.Length,
                                    MimeType  = FileEx.GetMimeTypeByExtension(fileInfo.Name),
                                    Name      = fileInfo.Name,
                                    Viewable  = false,
                                    Kind      = DocumentKind.User
                                };

                                db.Documents.Add(document);
                                uploadedDocuments.Add(document);

                                await db.SaveChangesAsync();

                                var docStream = new DocumentStream(db, document.ID);

                                await sSource.CopyToAsync(docStream);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    return(new HttpStatusCodeResult((int)HttpStatusCode.BadRequest, ex.Message));
                }
                finally
                {
                    if (sftp.IsConnected)
                    {
                        sftp.Disconnect();
                    }
                }
            }

            Response.StatusCode  = (int)HttpStatusCode.OK;
            Response.ContentType = "application/json";

            return(Json(uploadedDocuments.Select(d => new { d.ID, d.FileName, d.MimeType, Size = d.Length }), JsonRequestBehavior.AllowGet));
        }
예제 #3
0
 public ActionResult VerifyFTPCredentials(FTPCredentials credentials)
 {
     using (var sftp = new SftpClient(credentials.Address, credentials.Port, credentials.Login, credentials.Password))
     {
         try
         {
             sftp.Connect();
             Response.StatusCode  = (int)HttpStatusCode.OK;
             Response.ContentType = "application/json";
             return(Content("{}"));
         }
         catch (Exception ex)
         {
             return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
         }
         finally
         {
             if (sftp.IsConnected)
             {
                 sftp.Disconnect();
             }
         }
     }
 }