Laden Sie eine Datei mit der Codierung per FTP in C#

Folgende code ist gut für den Upload von text-Dateien, aber es nicht zum hochladen von JPEG-Dateien (nicht vollständig, der name der Datei ist gut, aber das Bild ist beschädigt):

private void up(string sourceFile, string targetFile)
{
    try
    {
        string ftpServerIP = ConfigurationManager.AppSettings["ftpIP"];
        string ftpUserID = ConfigurationManager.AppSettings["ftpUser"];
        string ftpPassword = ConfigurationManager.AppSettings["ftpPass"];

        //string ftpURI = "";
        string filename = "ftp://" + ftpServerIP + "//" + targetFile;
        FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(filename);
        ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
        ftpReq.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

        StreamReader stream = new StreamReader(sourceFile);
        Byte[] b = System.Text.Encoding.UTF8.GetBytes(stream.ReadToEnd());
        stream.Close();

        ftpReq.ContentLength = b.Length;
        Stream s = ftpReq.GetRequestStream();
        s.Write(b, 0, b.Length);
        s.Close();

        System.Net.FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();
        MessageBox.Show(ftpResp.StatusDescription);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

Ich eine andere Lösung haben, können Sie eine Datei hochladen:

private void Upload(string sourceFile, string targetFile)
{
    string ftpUserID;
    string ftpPassword;
    string ftpServerIP;
    ftpServerIP = ConfigurationManager.AppSettings["ftpIP"];
    ftpUserID = ConfigurationManager.AppSettings["ftpUser"];
    ftpPassword = ConfigurationManager.AppSettings["ftpPass"];
    FileInfo fileInf = new FileInfo(sourceFile);
    FtpWebRequest reqFTP;

    //Create FtpWebRequest object from the Uri provided
    reqFTP = (FtpWebRequest)(FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "//" + targetFile)));

    //Provide the WebPermission Credintials
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

    //Bypass default lan settings
    reqFTP.Proxy = null;

    //By default KeepAlive is true, where the control connection is not closed
    //after a command is executed.
    reqFTP.KeepAlive = false;

    //Specify the command to be executed.
    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

    //Specify the data transfer type.
    reqFTP.UseBinary = true;

    //Notify the server about the size of the uploaded file
    reqFTP.ContentLength = fileInf.Length;

    //The buffer size is set to 2kb
    int buffLength = 2048;
    Byte[] buff;
    buff = new byte[buffLength];
    int contentLen;

    //Opens a file stream (System.IO.FileStream) to read the file to be uploaded
    FileStream fs = fileInf.OpenRead();

    try
    {
        //Stream to which the file to be upload is written
        Stream strm = reqFTP.GetRequestStream();

        //Read from the file stream 2kb at a time
        long filesize = fs.Length;
        int i=0;
        contentLen = fs.Read(buff, 0, buffLength);

        //Till Stream content ends
        while (contentLen != 0)
        {
            Application.DoEvents();
            //Write Content from the file stream to the FTP Upload Stream
            strm.Write(buff, 0, contentLen);
            contentLen = fs.Read(buff, 0, buffLength);
            i = i + 1;
            //Double percentComp = (i * buffLength) * 100 /filesize;
            //ProgressBar1.Value = (int)percentComp;
        }

        //Close the file stream and the Request Stream
        strm.Close();
        fs.Close();
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Upload Error");
    }
}

Aber hier habe ich das gegenteilige problem - das Bild ist gut, aber der name der Datei beschädigt ist.

Weiß ich, es ist, weil der Kodierung, aber ich weiß nicht, wie das Byte array haben die gewünschte Codierung...

Ich kann nicht verstehen, warum hätten Sie das problem mit beschädigten Dateinamen mit dem zweiten code, aber nicht mit dem ersten code. Und warum sollten die akzeptierten Antworten helfen mit, dass. In allen Fällen geben Sie den Namen der Datei genau die gleiche Weise.
Tut mir Leid, Martin. Ich habe die Frage vor einem Jahrzehnt. Ich kann mich nicht mehr erinnern was das problem war und was die Lösung war. Ich denke, man sollte einen neuen thread aufmachen mit deiner eigenen Frage.
Ich habe keine Frage, ich Frage mich nur, was ist der Sinn von deiner Frage und der Antwort 🙂
🙂 ... meine Vergangenheit ist die Jagd auf mich ;)... ich wirklich nicht erinnern. Wahrscheinlich habe ich etwas falsch(bug) und es ist sogar möglich, dass Microsoft hatte einen bug, der wurde behoben...

InformationsquelleAutor Asaf | 2010-08-26

Schreibe einen Kommentar