Porównaj ceny domen i usług IT, sprzedawców z całego świata

Prześlij plik na FTP przy użyciu C #


Próbuję przekazać plik na serwer FTP z C #. plik załadowany, ale z zerowymi bajtami.
private void button2_Click(object sender, EventArgs e)
{
var dirPath = @"C:/Documents and Settings/sander.GD/Bureaublad/test/"; ftp ftpClient = new ftp("ftp://example.com/", "username", "password"); string[] files = Directory.GetFiles(dirPath,"*.*"); var uploadPath = "/httpdocs/album"; foreach (string file in files)
{
ftpClient.createDirectory("/test"); ftpClient.upload(uploadPath + "/" + Path.GetFileName(file), file);
} if (string.IsNullOrEmpty(txtnaam.Text))
{
MessageBox.Show("Gelieve uw naam in te geven !");
}
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Istniejące odpowiedzi są poprawne, ale po co ponownie wymyślać koło i bałagan z typami
WebRequest
niższego poziomu

,
https://msdn.microsoft.com/en- ... quest
podczas
WebClient
https://msdn.microsoft.com/en- ... lient
Już wdraża ładowanie FTP:
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
client.UploadFile("ftp://host/path.zip", WebRequestMethods.Ftp.UploadFile, localFile);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

public void UploadFtpFile(string folderName, string fileName)
{ FtpWebRequest request; string folderName;
string fileName;
string absoluteFileName = Path.GetFileName(fileName); request = WebRequest.Create(new Uri(string.Format(@"ftp://{0}/{1}/{2}", "127.0.0.1", folderName, absoluteFileName))) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = 1;
request.UsePassive = 1;
request.KeepAlive = 1;
request.Credentials = new NetworkCredential(user, pass);
request.ConnectionGroupName = "group"; using (FileStream fs = File.OpenRead(fileName))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Flush();
requestStream.Close();
}
}

Jak używać
UploadFtpFile("testFolder", "E:\\filesToUpload\\test.img");

użyj tego w swoim foreach
i wystarczy, że utworzysz folder tylko raz
aby utworzyć folder
request = WebRequest.Create(new Uri(string.Format(@"ftp://{0}/{1}/", "127.0.0.1", "testFolder"))) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse ftpResponse = (FtpWebResponse)request.GetResponse();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Najłatwiejszy sposób
>
Najprostszym sposobem przesłania pliku na serwer FTP przy użyciu platformy .NET jest użycie

metoda
https://docs.microsoft.com/en- ... dfile
WebClient.UploadFile
:
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");


Dodatkowe opcje
>
Jeśli potrzebujesz większej kontroli, której nie oferuje
WebClient
(np.
, Szyfrowanie TLS/
https://coderoad.ru/4331665/
SSL, tryb ASCII, tryb aktywny itp.), Użyj
FtpWebRequest
https://docs.microsoft.com/en- ... st... Najprostszym sposobem jest skopiowanie
FileStream
do strumienia FTP za pomocą
Stream.CopyTo
https://docs.microsoft.com/en- ... opyto
:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile; using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
fileStream.CopyTo(ftpStream);
}


Monitorowanie postępów
>
Jeśli chcesz śledzić postęp pobierania, musisz samodzielnie skopiować zawartość w kawałkach:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile; using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
byte[] buffer = new byte[10240];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, read);
Console.WriteLine("Uploaded {0} bytes", fileStream.Position);
}
}

Aby zapoznać się z graficznym interfejsem użytkownika postępu (WinForms
ProgressBar
), zobacz przykład w języku C # pod adresem:
Jak możemy wyświetlić pasek postępu pobierania za pomocą FtpWebRequest
https://coderoad.ru/6341024/

Folder pobierania
>
Jeśli chcesz pobrać wszystkie pliki z folderu, zobacz

Sekcja

Przesyłanie katalogu plików na serwer FTP za pomocą WebClient
https://coderoad.ru/44012637/
.
W przypadku ładowania rekurencyjnego zobacz
Rekurencyjne przesyłanie na serwer FTP w języku C #
https://coderoad.ru/60925131/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

U mnie działa:
public virtual void Send(string fileName, byte[] file)
{
ByteArrayToFile(fileName, file); var request = (FtpWebRequest) WebRequest.Create(new Uri(ServerUrl + fileName)); request.Method = WebRequestMethods.Ftp.UploadFile;
request.UsePassive = false;
request.Credentials = new NetworkCredential(UserName, Password);
request.ContentLength = file.Length; var requestStream = request.GetRequestStream();
requestStream.Write(file, 0, file.Length);
requestStream.Close(); var response = (FtpWebResponse) request.GetResponse(); if (response != null)
response.Close();
}

Nie możesz odczytać parametru send file w swoim kodzie, ponieważ jest to tylko nazwa pliku.
Użyj następujących:
byte[] bytes = File.ReadAllBytes(dir + file);

Aby otrzymać plik, możesz przekazać go do metody
Send
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

public static void UploadFileToFtp(string url, string filePath, string username, string password)
{
var fileName = Path.GetFileName(filePath);
var request = (FtpWebRequest)WebRequest.Create(url + fileName); request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false; using (var fileStream = File.OpenRead(filePath))
{
using (var requestStream = request.GetRequestStream())
{
fileStream.CopyTo(requestStream);
requestStream.Close();
}
} var response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload done: {0}", response.StatusDescription);
response.Close();
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W pierwszym przykładzie musisz je zmienić na:
requestStream.Flush();
requestStream.Close();

Najpierw spłucz, a następnie zamknij.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To działa dla mnie, ta metoda spowoduje przesłanie pliku SFTP do folderu w Twojej sieci.
Korzysta z biblioteki SSH.NET.2013.4.7, którą możesz po prostu pobrać za darmo.
//Secure FTP
public void SecureFTPUploadFile(string destinationHost,int port,string username,string password,string source,string destination) {
ConnectionInfo ConnNfo = new ConnectionInfo(destinationHost, port, username, new PasswordAuthenticationMethod(username, password)); var temp = destination.Split('/');
string destinationFileName = temp[temp.Count() - 1];
string parentDirectory = destination.Remove(destination.Length - (destinationFileName.Length + 1), destinationFileName.Length + 1);
using (var sshclient = new SshClient(ConnNfo))
{
sshclient.Connect();
using (var cmd = sshclient.CreateCommand("mkdir -p " + parentDirectory + " && chmod +rw " + parentDirectory))
{
cmd.Execute();
}
sshclient.Disconnect();
}
using (var sftp = new SftpClient(ConnNfo))
{
sftp.Connect();
sftp.ChangeDirectory(parentDirectory);
using (var uplfileStream = System.IO.File.OpenRead(source))
{
sftp.UploadFile(uplfileStream, destinationFileName, true);
}
sftp.Disconnect();
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

data publikacji: 26.06.2018
https://docs.microsoft.com/en-us/ dotnet/framework/network -ming/how-to-upload-files-c-ftp
https://docs.microsoft.com/en- ... h-ftp
using System;
using System.IO;
using System.Net;
using System.Text;namespace Examples.System.Net
{
public class WebRequestGetExample
{
public static void Main ()
{
// Get the object used to communicate with the server.
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
request.Method = WebRequestMethods.Ftp.UploadFile;// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("anonymous",
"janeDoe@contoso.com");// Copy the contents of the file to the request stream.
byte[] fileContents;
using (StreamReader sourceStream = new StreamReader("testfile.txt"))
{
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
} request.ContentLength = fileContents.Length; using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
} using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
Console.WriteLine($"Upload File Complete, status
{response.StatusDescription}");
}
}
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zauważyłem to -
  • Brak FtpwebRequest.
  • Wymagane są zarówno cel FTP, jak i NetworkCredential.

Przygotowałem metodę, która działa w ten sposób, możesz zastąpić wartość zmiennej ftpurl parametrem TargetDestinationPath. Przetestowałem tę metodę na aplikacji winForms:
private void UploadProfileImage(string TargetFileName, string TargetDestinationPath, string FiletoUpload)
{
//Get the Image Destination path
string imageName = TargetFileName;//you can comment this
string imgPath = TargetDestinationPath; string ftpurl = "ftp://downloads.abc.com/downloads.abc.com/MobileApps/SystemImages/ProfileImages/" + imgPath;
string ftpusername = krayknot_DAL.clsGlobal.FTPUsername;
string ftppassword = krayknot_DAL.clsGlobal.FTPPassword;
string fileurl = FiletoUpload; FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl);
ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword);
ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
ftpClient.UseBinary = true;
ftpClient.KeepAlive = true;
System.IO.FileInfo fi = new System.IO.FileInfo(fileurl);
ftpClient.ContentLength = fi.Length;
byte[] buffer = new byte[4097];
int bytes = 0;
int total_bytes = (int)fi.Length;
System.IO.FileStream fs = fi.OpenRead();
System.IO.Stream rs = ftpClient.GetRequestStream();
while (total_bytes > 0)
{
bytes = fs.Read(buffer, 0, buffer.Length);
rs.Write(buffer, 0, bytes);
total_bytes = total_bytes - bytes;
}
//fs.Flush();
fs.Close();
rs.Close();
FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse();
string value = uploadResponse.StatusDescription;
uploadResponse.Close();
}

Daj mi znać w razie jakichkolwiek problemów lub oto inny link, który może Ci pomóc:
https://msdn.microsoft.com/en-us/ library/ms229715(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/ms229715(v=vs.110).aspx

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się