- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个本地 FTP 服务器(使用 FileZilla 服务器创建),并且 XLS 文件很少。我需要将文件输入流返回到我的 Java 应用程序,以便我可以解析数据等。
为此,我尝试使用 FTPClient,但由于某种原因,在尝试从文件(大于 40KB 或)返回输入流时,FTPClient.retrieveFileStream() 挂起。
我知道有与此类似的问题,并且我已经阅读了所有这些问题,至少是我能找到的所有问题,但没有任何帮助我。这真的很烦人,如果可能的话我希望得到一些帮助。
相关代码部分:
public FTPwrapper(){
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Properties props = (Properties) context.getBean("ftp_props");
this.FTPhost = props.getProperty("host");
this.FTPuser = props.getProperty("user");
this.FTPpass = props.getProperty("pass");
this.FTPport = Integer.parseInt(props.getProperty("port"));
this.filesPath = props.getProperty("filesPath");
//start ftp connection
try {
client.connect(this.FTPhost, this.FTPport);
client.login(this.FTPuser, this.FTPpass);
client.setBufferSize(1024 * 1024);
client.enterLocalPassiveMode();
client.setFileType(FTP.BINARY_FILE_TYPE);
} catch (IOException e) {
e.printStackTrace();
}
}
<小时/>
public InputStream returnFileStream(String FileName){
InputStream inputstream = null;
try {
String remoteFile = this.filesPath+FileName;
inputstream = client.retrieveFileStream(remoteFile);
client.completePendingCommand();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (client.isConnected()) {
client.logout();
client.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return inputstream;
}
<小时/>
public static void main(String[] args){
FTPwrapper ftp = new FTPwrapper();
InputStream inputstream = ftp.returnFileStream("2012 m muzieju statistika.xls");
}
<小时/>
FPT 日志:
...login commands...
227 Entering Passive Mode
RETR /vtipsis_data/KT/2012 m muzieju statistika.xls
50 Opening data channel for file download from server of "/vtipsis_data/KT/2012 m muzieju statistika.xls" //Hangs...
FTP 连接最终超时后,出现 java 异常:
java.io.IOException: Your file contains 383 sectors, but the initial DIFAT array at index 4 referenced block # 505. This isn't allowed and your file is corrupt
at org.apache.poi.poifs.storage.BlockAllocationTableReader.<init>(BlockAllocationTableReader.java:103)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:151)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
我认为此异常是因为仅返回了 XLS 文件输入流的一部分。这就是我的问题。有什么想法可以解决这个问题吗?
最佳答案
这不是我想要的答案,而是一个足够的解决方法...我没有尝试使用 retrieveFileStream
直接检索流,而是使用 retrieveFile
下载文件作为临时系统文件,并将我从retrieveFile获得的OutputStream转换为InputStream。之后我只需删除下载的临时文件。
尝试使用it.sauronsoftware.ftp4j
,但它没有类似retrieveFileStream
的方法/功能,只能下载文件。
编辑:
我找到了一种无需使用 retrieveFileStream
或下载文件即可返回文件输入流的方法。由于retrieveFile
返回OutputStream,我可以将OutputStream转换为InputStream(为什么我之前没有想到这一点?),例如:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
client.retrieveFile(remoteFile, outputStream);
InputStream inputstream = new ByteArrayInputStream(outputStream.toByteArray());
关于java - FtpClient 检索文件流 [挂起],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485195/
自从我不得不从 java ftp 文件以来已经有很多年了,所以我对这种可能性有点脱节。我找到的文档列出了我使用的两种可能性。标准 Sun ftp 实现和 Apache 的 Jakarta ftp 解决
我尝试在我的应用程序中使用 ftp 客户端 第一个我使用org.apache.commons.net.ftp.FTPClient 但在Linux服务器上运行时 可以登录ftp服务器,但无法获取文件列表
我的 ftp 位置有 3 个不同大小的文件,分别是 2KB、76KB 和 216MB。我必须一个接一个地处理这些文件,我可以使用retrieveFileStream(FILE_NAME_HERE)轻松
FTPClient.changeWorkingDirectory & changeToParentDirectory()。如何更改 ftpCient 中的目录。在资源管理器中,ftp 路径如下所示 f
我有一个给定的 FTP 服务器。我可以通过 WinSCP 和其他程序连接到服务器。我已经通过 Java 连接到服务器,但过了一会儿我无法连接。根据 WinSCP,我可以一直连接。现在的问题是服务器是问
我正在尝试从 ftp 服务器下载文件,但在检索文件时卡住了。我正在使用 commons-net-3.6.jar 我注意到的事情 当我使用 ftpClient.enterRemotePassiveMod
我想从 Android 应用程序上传文件到 FTP 服务器。我为此使用 ftp4j.jar,因为它具有附加功能,可以附加到服务器上已有的文件。以前工作正常,但现在它已停止工作附加文件。其余正在工作。我
我正在制作一个应用程序,可让您一次将最多 5 个文件上传到服务器。我正在使用 apache FTPClient 和 Filezilla 服务器。当我一次上传一个文件时,它可以工作,但是当我尝试进行 2
大家好,我正在尝试上传一个小文件,如 4mb 或其他带有 apache commons ftpclient 的文件,但它没有上传我的文件,没有给我任何错误,并说上传成功这是我的代码,请提前帮助我谢谢.
我正在使用 Apache Commons net FTPClient 登录 FTP 服务器并读取文件。我成功登录,并且可以看到它登录成功,因为它在标题字符串中显示了工作目录路径。但是,当我使用 lis
我试图从 ftp 服务器获取列表并且有编码问题 FTPClient.listfiles(String path) 方法 如果路径包含非拉丁字符,它总是返回空数组。 (我也在 unicode 中使用带有
我制作了一个小应用程序,可以将文件上传到 FTP 服务器。问题是我在方法中使用了被动模式 enterLocalPassiveMode() 最近有人告诉我在 FTP 服务器上不允许使用被动模式,所以我应
我写了一个从 FTP 服务器下载文件的 java 类。一切看起来都很好,但是当我检查文件大小时,它们比原始文件小一点。 知道为什么会这样吗? import java.io.FileOutputStre
我正在使用 Apache FTPClient 获取文件和子目录文件列表。但它无法从带空格的目录名称中获取文件列表。这是一个示例 - 我尝试了两个不同的目录: FTPClient client
我是 android 和 java 编程的新手。我写了下面的代码来连接到 ftp 服务器 public class NewMainActivity extends Activity { TextVie
1、Ubuntu 安装 Vsftpd 服务 1、安装 sudo apt-get install vsftpd 2、添加用户(uftp) sudo useradd -d /home/
我有一个本地 FTP 服务器(使用 FileZilla 服务器创建),并且 XLS 文件很少。我需要将文件输入流返回到我的 Java 应用程序,以便我可以解析数据等。 为此,我尝试使用 FTPClie
我尝试使用 FTPClient 类进行连接。这段代码运行完美: client.connect("172.20.5.131"); 但是当 IP 地址类似于 -1406991772 时,我无法连接。我怎样
我正在使用 FTPClient (org.apache.commons.net.ftp.FTPClient) 将一些文件上传到 FTP 服务器。 我需要检查父目录是否存在;并根据需要创建它们
我必须上传一个zip文件到ftp服务器,这里的zip文件也是动态构建的。 import java.io.File; import java.io.FileInputStream; import jav
我是一名优秀的程序员,十分优秀!