es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Subida de múltiples archivos C# a FTP

Tengo un método donde guardo un único archivo. Quiero completar las cargas de esta manera creando otro método donde pueda guardar más de un archivo al mismo tiempo. ¿Cómo puedo hacer eso?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un método que pueda guardar múltiples archivos al mismo tiempo, podemos modificar el código existente para aceptar una array o lista de objetos IFormFile en lugar de un solo archivo. Luego, podemos recorrer cada archivo y utilizar el código existente para cargar cada archivo uno por uno. Aquí tienes un ejemplo de implementación:

    public static class FileUpload
    {
        public static List<string> UploadFtp(this IEnumerable<iformfile> files, string Location, CdnSetting cdn)
        {
            var fileExtensions = new List<string>();
            var imageUrls = new List<string>();
    
            foreach (var file in files)
            {
                var fileExtension = Path.GetExtension(file.FileName);
                var imageUrl = cdn.Url + Location + "/" + Guid.NewGuid().ToString() + fileExtension;
    
                using (WebClient client = new WebClient())
                {
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(cdn.Address + imageUrl);
                    request.Method = WebRequestMethods.Ftp.UploadFile;
    
                    request.Credentials = new NetworkCredential(cdn.Name, cdn.Password);
                    request.UsePassive = cdn.UsePassive;
                    request.UseBinary = cdn.UseBinary;
                    request.KeepAlive = cdn.KeepAlive;
    
                    byte[] buffer = new byte[1024];
                    var stream = file.OpenReadStream();
                    byte[] fileContents;
    
                    using (var ms = new MemoryStream())
                    {
                        int read;
                        while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            ms.Write(buffer, 0, read);
                        }
                        fileContents = ms.ToArray();
                    }
    
                    using (Stream requestStream = request.GetRequestStream())
                    {
                        requestStream.Write(fileContents, 0, fileContents.Length);
                    }
    
                    var response = (FtpWebResponse)request.GetResponse();
                }
    
                fileExtensions.Add(fileExtension);
                imageUrls.Add(cdn.Return + imageUrl);
            }
    
            return imageUrls;
        }
    }
    

    Este método acepta un IEnumerable en lugar de un solo IFormFile. Luego recorremos cada archivo en la lista, lo cargamos en el servidor FTP y almacenamos la URL de la imagen resultante en una lista. Finalmente, devolvemos la lista de URLs de las imágenes al código que lo llama.

    Para usar este nuevo método para cargar múltiples archivos, simplemente pasa una lista de objetos IFormFile:

    “`
    var files = new List();
    // agregar archivos a la lista

    var cdn = new CdnSetting();
    // configurar ajustes del CDN

    var imageUrls = files.UploadFtp(“uploads/”, cdn);
    // imageUrls ahora es una lista de URLs de cadena para cada archivo cargado
    “`

Comments are closed.