为什么在C#中上传文件到FTP服务器要给文件添加页眉和页脚

我正在尝试使用 C# 将文件上传到 FTP 服务器。除了我的所有文件(一旦在服务器上)都有页眉和页脚这一事实之外,上传工作正常。这里有一个例子:


--------------8d5fde16cb03f95


Content-Disposition: form-data; name="file"; filename="PNPP190618.manifest"


Content-Type: application/octet-stream




<Real file content here>



--------------8d5fde16cb03f95

当然我检查了我的原始文件没有这个文本,我上传了一些有同样问题的二进制文件。


谢谢你。


编辑:忘记向您展示我的代码:


        WebClient client = new System.Net.WebClient();

        Uri uri = new Uri(FTPHost + new FileInfo(FilePath).Name);

        client.UploadProgressChanged += new UploadProgressChangedEventHandler(OnFileUploadProgressChanged);

        client.UploadFileCompleted += new UploadFileCompletedEventHandler(OnFileUploadCompleted);

        client.Credentials = new System.Net.NetworkCredential(FTPUserName, FTPPassword);

        client.UploadFileAsync(uri, "STOR", FilePath);

EDIT2:WinSCP 会话日志(此方法没有问题):https : //pastebin.com/sv7FNC0i


EDIT3:我没有使用代理。


我试图在 Unity 2017 (Mono .NET 3.5) 和控制台项目 (.NET Framework 3.5) 的最小示例上重现该问题。.NET Framework 没有问题,但在 Unity 2017 中有问题。


以下是重现最小 Unity 项目的步骤:

  1. 创建一个新的空白 Unity 项目

  2. 在场景中添加一个空的 GameObject,并添加一个新脚本

  3. 粘贴下面的代码并将类名替换为您的脚本文件名

  4. 用文件和FTP服务器的示例填充属性

  5. 按播放

using System;

using System.IO;

using System.Net;

using UnityEngine;


public class Test : MonoBehaviour {


    string FTPHost = "ftp://Fill here";

    string FTPUserName = "Fill here";

    string FTPPassword = "Fill here";

    string FilePath = "Fill here";


    // Use this for initialization

    void Start () {



        WebClient client = new WebClient();

        Uri uri = new Uri(FTPHost + new FileInfo(FilePath).Name);

        client.Credentials = new NetworkCredential(FTPUserName, FTPPassword);

        client.UploadFile(uri, WebRequestMethods.Ftp.UploadFile, FilePath);

    }


    // Update is called once per frame

    void Update () {


    }

}




缥缈止盈
浏览 175回答 1
1回答

拉莫斯之舞

我改用了 FtpWebRequest。代码要复杂得多,但它有效:&nbsp; &nbsp; FtpState state = new FtpState();&nbsp; &nbsp; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);&nbsp; &nbsp; request.Method = WebRequestMethods.Ftp.UploadFile;&nbsp; &nbsp; request.Credentials = new NetworkCredential (FTPUserName,FTPPassword);&nbsp; &nbsp; state.Request = request;&nbsp; &nbsp; state.FileName = FilePath;&nbsp; &nbsp; request.BeginGetRequestStream(&nbsp; &nbsp; &nbsp; &nbsp; new AsyncCallback (EndGetStreamCallback),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; state&nbsp; &nbsp; );从 MSDN 文档中复制并粘贴 EndGetStreamCallback 和 FtpState。
打开App,查看更多内容
随时随地看视频慕课网APP