将文件上传到 FTP 一旦到达目的地就会损坏

2023-12-21

我正在创建一个简单的拖动文件并自动上传到 ftp Windows 应用程序

我正在使用MSDN代码 http://msdn.microsoft.com/en-us/library/ms229715.aspx将文件上传到 FTP。

代码非常简单:

// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(String.Format("{0}{1}", FTP_PATH, filenameToUpload));
request.Method = WebRequestMethods.Ftp.UploadFile;

// Options
request.UseBinary = true;
request.UsePassive = false;

// FTP Credentials
request.Credentials = new NetworkCredential(FTP_USR, FTP_PWD);

// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(fileToUpload.FullName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
writeOutput("Upload File Complete!");
writeOutput("Status: " + response.StatusDescription);

response.Close();

and it does上传到FTP

问题是当我在浏览器上看到该文件,或者只是下载并尝试在桌面上查看它时,我得到:

我已经用过request.UseBinary = false; and request.UsePassive = false;但它似乎没有任何好处。

我发现了什么是这样的,原始文件有 122 Kb 长度,在 FTP 中(以及下载后),它有 219Kb...

我究竟做错了什么?

顺便说一句,uploadFileToFTP()方法正在内部运行BackgroundWorker,但我真的不认为这有什么区别......


您不应该使用 StreamReader 而只能使用 Stream 来读取二进制文件。

Streamreader 设计为仅读取文本文件。

尝试用这个:

private static 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.UseBinary = true;
        ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
        ftpReq.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

        byte[] b = File.ReadAllBytes(sourceFile);

        ftpReq.ContentLength = b.Length;
        using (Stream s = ftpReq.GetRequestStream())
        {
            s.Write(b, 0, b.Length);
        }

        FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();

        if (ftpResp != null)
        {
            MessageBox.Show(ftpResp.StatusDescription);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件上传到 FTP 一旦到达目的地就会损坏 的相关文章

随机推荐

  • AngularJS ng-重复性能

    我使用 AngularJS ng repeat 来查看我的表格元素 它不应该经常使用 我知道 但我不知道如何以其他方式做到这一点 这是我如何展示的示例容器对象表中 http jsfiddle net NfPcH 10390 http jsf
  • 访问反向关系上的 prefetch_lated 字段

    我有这个型号 class Animal models model name models CharField class Dog Animal field models IntegerField class Owner models mod
  • 处理 EINTR(使用 goto?)

    背景 这是一个后续问题这个线程 https stackoverflow com questions 2957759 using gprof with sockets关于在 C Linux GCC 中处理系统调用的 EINTR 无论我是否打算
  • 即使使用 User-Agent 标头,如何修复 Python 请求的“403 Forbidden”错误?

    我正在向某个 URL 发送请求 我将curl命令复制到python中 因此 所有标头都包含在内 但我的请求不起作用 并且我在 HTML 输出中收到状态代码 403 和错误代码 1020 代码是 import requests headers
  • 生成数字范围内的 N 个随机数的列表

    我想生成一个 n length 列表 其中包含定义范围内随机生成的数字 我想知道的是我是否缺少一些内置的东西 这些东西可以让我在未来以更Pythonic和更干净的方式做到这一点 感谢您的任何想法 In 59 from random impo
  • Python sympy无法求解多项式函数

    我在用 sympy 求解多项式函数时遇到问题 以下示例显示了一个给出我无法管理的错误消息的情况 如果多项式变得更简单 则求解器可以正常工作 请复制并粘贴代码以检查系统上的错误 import sympy from sympy import I
  • 销毁通过 Serverless 创建的资源而不销毁 Lambda 端点

    我在 serverless yml 文件中定义了以下资源 为我所有不同的发展阶段创建资源非常有用 resources Resources uploadBucket Type AWS S3 Bucket Properties BucketNa
  • Google Chrome PDF 查看器复选框不起作用

    我们在生成 PDF 的 Chrome PDF 查看器中遇到问题 其中复选框未更改状态 即被选中 并且当您按 TAB 键退出某些字段时 某些字段会丢失值 但当它们获得焦点时 值会再次显示 还有其他人经历过吗 如果是这样 对如何解决这个问题有什
  • mkdir() 在内部闪存中起作用,但在 SD 卡中不起作用?

    我目前正在构建一个文件管理应用程序 允许用户浏览其设备的文件系统 用户从根目录开始 的设备 但可以浏览到他们想要的任何位置 例如内部闪存或 SD 卡 该应用程序的关键要求之一是允许用户在任何地方创建新文件夹 像这样的功能对于应用程序来说非常
  • CSS - 悬停时平滑按钮渐变颜色过渡

    我有以下按钮 上面按钮的 CSS 是这样的 cta btn display inline block margin 20px 0 0 20px color fff background color FF8F1B background ima
  • Twitter 引导下拉菜单超出屏幕范围

    我想实现 twitter bootstrap 下拉菜单 这是我的代码 span class dropdown a href menu1 class dropdown toggle img class left src static img
  • 如何在 Dialogflow 中的 webhook 中执行槽验证?

    如何使用后端代码 webhook 在意图中执行插槽验证 我已经了解了如何使用 webhooks 执行槽填充 但我想知道如何验证槽数据并在验证失败时重新提示用户 Example 用户 我想了解你们在伦敦的服务 Bot 我们不在伦敦提供服务 请
  • python、matplotlib、svg 和文本标签中的超链接

    In 绘图库 http matplotlib sourceforge net 有可能使用超链接创建 SVG 图形 http matplotlib sourceforge net examples pylab examples hyperli
  • Android 上 GZIPInputStream 的截断输出

    我一定做错了什么 在 Android 上运行以下代码会生成截断的文件 items 日志中没有任何异常或问题 使用 OpenJDK 7 运行相同的代码 它可以正确解压缩文件 try final InputStream fis new GZIP
  • C - 测量计算时间

    有没有简单的方法来测量C中的计算时间 我在执行时尝试了时间实用程序 但我需要测量程序的特定部分 Thanks 您可以使用clock函数于
  • 如何使用NAudio的BiQuadFilter?

    我使用 NAudio 录制麦克风的声音并将其保存在文件中 我用这个 public WaveFileWriter m WaveFile null m WaveFile new WaveFileWriter strFile m WaveSour
  • Windows cmd 模拟控制台输入命令

    我需要编写一个批处理脚本 当用户名和密码保存在某处 例如 在文件中 时 该脚本会自动连接到 VPN VPN 客户端是 openconnect 它提供了 CLI 但问题是需要以交互方式向命令提供用户输入才能完成 当我运行时请参阅下面的输出 o
  • 为 Spring MVC/AOP 应用程序实现动态菜单

    我希望为我的 Spring MVC 应用程序实现动态可更改的菜单 每当添加注释方法或控制器时更新 我想要的是引入新的注释 RequestMenuMapping 这将去 Controllerbeans 及其方法 就像 RequestMappi
  • 如何将 TLS 1.0 与 Python 3.8 结合使用?

    我有一个使用 Jira 连接的代码jira module 不幸的是 Jira 服务器仅支持SSLv3 and TLS1 我知道它们是旧协议 今年年底前主办方将接受新的 但在那之前我需要我的 python 代码来使用 Jira 连接TLS1
  • 将文件上传到 FTP 一旦到达目的地就会损坏

    我正在创建一个简单的拖动文件并自动上传到 ftp Windows 应用程序 我正在使用MSDN代码 http msdn microsoft com en us library ms229715 aspx将文件上传到 FTP 代码非常简单 G