Java使用FTP上传文件被损坏的问题

2023-11-02

原因

  首先,此问题是因为FTP协议定义的数据传输方式有关,当Java FTP客户端使用ASCII传输时会发现有些上传的文件已经被损坏。

 

FTP协议规定了两种传输方式分别是ASCII与binary方式:

  1. ASCII 方式,这种机制指,在针对传输内容是 ASCII 码文本时,文件内容会被调整,有时会造成传输的文件被损坏, ASCII 方式会把文件中的某些字符串位丢弃,所以不能保证文件数据的每一位都是重要的。
  2. 二进制方式,首先二进制方式保证了文件内容所有数据位都是重要的。
  3. 经过验证在传输文件类型为非文本内容的文件,使用 ASCII 传输方式造成 copy 的文件已经损坏。

示例代码(注意FTP.BINARY_FILE_TYPE/FTP.ASCII_FILE_TYPE):

 

  1. /** 
  2.  * 向远程服务器上传资源 
  3.  * @param destResource 上传文件对象 
  4.  * @return {true:成功;false:失败} 
  5.  * @throws IOException IOException 
  6.  */  
  7. public boolean uploadFile(File destResource) throws IOException {  
  8.     InputStream ins = (new FileInputStream(destResource));  
  9.     ftpClient.setFileType(FTP.BINARY_FILE_TYPE);  
  10.     // ftpClient.setFileType(FTP.ASCII_FILE_TYPE);  
  11.     ftpClient.changeWorkingDirectory("tmp");  
  12.     boolean rtnFlag = ftpClient.storeFile(destResource.getName(), ins);  
  13.     ins.close();  
  14.     return rtnFlag;  
  15. }  




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java使用FTP上传文件被损坏的问题 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口

随机推荐

  • 多线程并行 Dijkstra与A*算法结合实践

    多线程并行 Dijkstra与A 算法融合 1 Dijkstra总能找到最优解 但是时间消耗大 本文实现了多线程并行的搜索算法 使得路径搜素时间缩短约1 3 2 H作为传入参数可以使得本算法可以切换为A 也可以变为Dijkstra 3 本算
  • 冒泡法对10个数升序排序

    include
  • 智能合约编写之Solidity的编程攻略|FISCO BCOS超话区块链专场(篇5)

    前 言 作为一名搬砖多年的资深码农 刚开始接触Solidity便感觉无从下手 昂贵的计算和存储资源 简陋的语法特性 令人抓狂的debug体验 近乎贫瘠的类库支持 一言不合就插入汇编语句 让人不禁怀疑 这都已经过了9012年了 居然还有这种反
  • 在这么“内卷”的时期,作为转行python两年的人,想给学python的提个醒....

    近日 顶级互联网外企 PayPal 的秋招要求引发了技术界热议 其官方招聘公众号上显示 本次校招仅面向硕士和博士 消息一出 不少程序员都震惊了 现在已经这么卷了吗 只要硕士 其实 不仅是PayPal 许多世界级外企如微软 Intel在招聘时
  • 移动端Loading的两种方式--RN

    方式一 1 先封装一个 Loading 组件 import React from react import StyleSheet View ActivityIndicator from react native const Loading
  • python pip换源、更新

    pip临时使用 pip install i https pypi tuna tsinghua edu cn simple some package pip更新 使用镜像源更新 pip install pip U pip install i
  • FILE结构体与fd文件标识符

    FILE结构体 我们通常对文件进行操作时 都会使用一些与文件相关的函数 比如 打开文件 FILE fopen const char path const char mode 关闭文件 int fclose FILEE fp 读文件 size
  • Java实战03之idea pringboot 整合log4j2日志,可以多日志文件

    目录 前言 一 先添加pom xml 依赖 二 log4j2 xml 配置 三 application yml 四 加几条测试日志 五 采用注解 log4j2 1 log4j2 xml 配置 2 测试类 编辑 启动项目 编辑 六 打印多个不
  • Python并发编程——多线程thread,多进程process,多协程coroutine的区别与选择

    目录 1 IO Bound与CPU Bound 2 多进程 多线程 多协程的对比 3 如何进行选择 1 IO Bound与CPU Bound IO Bound IO Bound指的是程序的运行效率受计算机IO能力的限制 在程序的运行过程中
  • Java 进程

    目录 什么是进程 操作系统 进程控制块 PCB PCB中的一些属性 pid 进程id 内存指针 文件描述符表 状态 优先级 记账信息 上下文 并行 并发 CPU分配 进程调度 内存分配 内存管理 进程间是如何通信的 什么是进程 如图 当我们
  • Flink CDC 2.2 正式发布,新增功能概述

    一 Flink CDC 2 2 概览经过3个多月的紧张开发 在社区开发者们的共同努力下 Flink CDC 2 2 版本正式发布了 Release Release 2 2 0 ververica flink cdc connectors G
  • Design Compiler —— Design Compliler中常用到的命令(示例)总结(十三)

    转载文章 来源出处 http www cnblogs com IClearner 作者 IC learner 本文将描述在Design Compliler中常用到的命令 这些命令按照流程的顺序进行嵌套讲解 主要是列举例子 大概的讲解布局如下
  • 基于树莓派的空气监测系统(1)项目介绍

    基于树莓派的空气监测系统 1 项目介绍 项目开发使用的知识点包括 Qt程序设计 Python编程 文件编程 串口编程 树莓派驱动程序开发 嵌入式系统学习 视频地址 嵌入式学习资料 资料地址 项目参考代码 下载 编译运行环境x86平台 程序中
  • close函数 qt_Qt学习: QCloseEvent关闭事件的使用及代码示例

    QCloseEvent事件是指 当你鼠标点击窗口右上角的关闭按钮时 所触发的函数 如果你没有重写virtual closeEvent QCloseEvent event 这个虚函数的话 系统是默认接受关闭事件的 所以就会关闭窗体 但有的时候
  • 基于51单片机的教室智能照明控制设计

    具体实现功能 系统由STC89C52单片机 时钟芯片DS1302 液晶屏LCD1602 光敏电阻 红外对管 LED灯模块 按键模块构成 具体功能 1 用4个LED灯模拟教室的照明灯 人数小于10人亮一个灯 10 20人亮二个灯 20 30人
  • cp文件服务器,docker容器与物理机的文件传输—docker cp命令

    ocker cp 用于容器与主机之间的数据拷贝 语法 docker cp OPTIONS CONTAINER SRC PATH DEST PATH docker cp OPTIONS SRC PATH CONTAINER DEST PATH
  • RK平台images打包细则

    IMGs打包细节 平台 RK3288 背景 RK3288编译产生了RK3288MiniLoaderAll V2 19 bin uboot img kernel img uboot img misc img recovery img reso
  • pycharm终端激活环境时报错

    pycharm终端激活环境时报错 nvoke Expression 无法将参数绑定到参数 Command 因为该参数为空字符串 所在位置 E anaconda anaconda anaconda3 envs wsbpytorch shell
  • 启明智显分享

    你现在所看到的是启明智显基于乐鑫ESP32 S3方案推出的4寸RGB接口的86盒开发板 你可以选择应用IDF或arduino进行开发 也可以选择我们提供的开发工具平台8ms上进行开发 为什么会选择8ms平台呢 因为平台已将LVGL作为可选软
  • Java使用FTP上传文件被损坏的问题

    原因 首先 此问题是因为FTP协议定义的数据传输方式有关 当Java FTP客户端使用ASCII传输时会发现有些上传的文件已经被损坏 FTP协议规定了两种传输方式分别是ASCII与binary方式 ASCII 方式 这种机制指 在针对传输内