写道
问题:
1)Web项目中下载图片,存在下载不全,丢失部份图片
2)FTP路径存在中文图片名称或中文路径
3)直接运行Main方法可以下载图片,放在Web项目中下载失败,错误异常"FileNotFoundException"
1)Web项目中下载图片,存在下载不全,丢失部份图片
2)FTP路径存在中文图片名称或中文路径
3)直接运行Main方法可以下载图片,放在Web项目中下载失败,错误异常"FileNotFoundException"
写道
为什么直接运行Main方法可以成功下载?
Myeclipse/eclipse 右击类--->Run As-->Run Configuration,查看默认编码,直接运行Main方法,JVM启动时,将类文件默认编码设置-Dfile.encoding=UTF-8(Default VM Arguments)
什么时候设置GBK还是UTF-8,依据是什么?
默认情况FTP服务器所在服务有关,Windowns采用GBK,Linux采用UTF-8编码
Myeclipse/eclipse 右击类--->Run As-->Run Configuration,查看默认编码,直接运行Main方法,JVM启动时,将类文件默认编码设置-Dfile.encoding=UTF-8(Default VM Arguments)
什么时候设置GBK还是UTF-8,依据是什么?
默认情况FTP服务器所在服务有关,Windowns采用GBK,Linux采用UTF-8编码
写道
为什么Web项目中,在执行下载前通过System.setProperties("file.encoding","UTF-8")设置編码,仍然提示FileNotFoundException即编码问影响,设置不起作用?
JVM 参数存在缓存,JVM启动时已加载至缓存,FtpURLConnection从缓存获取,后续通过System改变不启作用,Myeclipse/eclipse:windows-->preferences-->installed JREs-->Edit
JVM 参数存在缓存,JVM启动时已加载至缓存,FtpURLConnection从缓存获取,后续通过System改变不启作用,Myeclipse/eclipse:windows-->preferences-->installed JREs-->Edit
写道
Tomcat 启动时或运行Jar时设置-Dfile.encoding=UTF-8
FtpURLConnection用不好到处是坑,直接改JVM编码来适配FTP服务器,应用存在风险,建议下载图采用第三方工具如,Apache common net,附上FtpURLConnection getInputStream源码
FtpURLConnection用不好到处是坑,直接改JVM编码来适配FTP服务器,应用存在风险,建议下载图采用第三方工具如,Apache common net,附上FtpURLConnection getInputStream源码
public InputStream More ...getInputStream() throws IOException { if (!connected) { connect(); } if (http != null) return http.getInputStream(); if (os != null) throw new IOException("Already opened for output"); if (is != null) { return is; } MessageHeader msgh = new MessageHeader(); try { decodePath(url.getPath()); if (filename == null || type == DIR) { ftp.ascii(); cd(pathname); if (filename == null) is = new FtpInputStream(ftp, ftp.list()); else is = new FtpInputStream(ftp, ftp.nameList(filename)); } else { if (type == ASCII) ftp.ascii(); else ftp.binary(); cd(pathname); is = new FtpInputStream(ftp, ftp.get(filename)); } /* Try to get the size of the file in bytes. If that is successful, then create a MeteredStream. */ try { String response = ftp.getResponseString(); int offset; if ((offset = response.indexOf(" bytes)")) != -1) { int i = offset; int c; while (--i >= 0 && ((c = response.charAt(i)) >= '0' && c <= '9')) ; i = Integer.parseInt(response.substring(i + 1, offset)); msgh.add("content-length", ""+i); if (i > 0) { // Wrap input stream with MeteredStream to ensure read() will always return -1 // at expected length. // Check if URL should be metered boolean meteredInput = ProgressMonitor.getDefault().shouldMeterInput(url, "GET"); ProgressSource pi = null; if (meteredInput) { pi = new ProgressSource(url, "GET", i); pi.beginTracking(); } is = new MeteredStream(is, pi, i); } } } catch (Exception e) { e.printStackTrace(); /* do nothing, since all we were doing was trying to get the size in bytes of the file */ } String type = guessContentTypeFromName(fullpath); if (type == null && is.markSupported()) { type = guessContentTypeFromStream(is); } if (type != null) { msgh.add("content-type", type); } } catch (FileNotFoundException e) { try { cd(fullpath); /* if that worked, then make a directory listing and build an html stream with all the files in the directory */ ftp.ascii(); is = new FtpInputStream(ftp, ftp.list()); msgh.add("content-type", "text/plain"); } catch (IOException ex) { throw new FileNotFoundException(fullpath); } } setProperties(msgh); return is; }
相关推荐
* 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static void downLoadByUrl(String urlStr, String fileName, String savePath) throws ...
源码实现FTP文件下载时,需要注意安全性和效率问题。为了保证安全,应使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)进行加密传输,防止数据在传输过程中被窃取。此外,合理设置超时、重试机制...
Java下载程序是一个基础的软件开发任务,主要用于从服务器获取文件并保存到本地计算机。在这个“简单java下载程序”中,我们可以看到它当前专注于HTTP协议,这是互联网上最常用的通信协议之一,用于从Web服务器传输...
此外,如果上传的文件是文本文件,确保文件本身也是以正确的编码(如UTF-8)保存的,否则即使在传输过程中解决了编码问题,文件内容仍然可能出现乱码。 总结,Java中的FTP上传功能可以通过Apache Commons Net等库...
1. Java内置的FTP支持:Java的标准库`java.net.FTPURLConnection`提供了对FTP的基本支持,但它的API相对简单,功能有限,不适用于复杂的FTP操作。 2. 第三方库:Apache Commons Net库是Java中广泛使用的FTP客户端库...
使用 JDK 的 `FTPURLConnection` 类,上传文件的流程与下载类似,只是使用 `FTPURLConnection` 的 `setDoOutput(true)` 开启输出,然后通过 `OutputStream` 写入文件数据: ```java import java.io.OutputStream; ...
Java FTP(File Transfer Protocol)是Java编程中用于与FTP服务器交互的一种技术,它允许程序员编写应用程序来上传、下载文件,管理远程目录等。在Java中,我们通常使用`java.net.FTPURLConnection`类或者第三方库如...
5. **断点续传**:FTP客户端支持断点续传功能,如果下载过程中因网络问题中断,可以记录当前下载的位置,在恢复连接后继续从该位置下载,无需重新开始。 6. **匿名FTP访问**:一些FTP服务器允许匿名用户访问,用户...
在PB9中实现FTP功能,开发者通常会使用内置的.NET或Java支持来调用相关的FTP类库,例如System.Net.FtpClient(.NET Framework)或java.net.URL、java.net.FTPURLConnection(Java)。这些类库提供了丰富的API,可以...
主要依赖于`java.net.FTPURLConnection`类来实现FTP连接。但需要注意的是,这个类的功能相对有限,因此在实际开发中,我们通常会使用第三方库,如Apache的Commons Net库,它提供了更强大且易于使用的FTP功能。 **...
首先,Java提供了`java.net.FTPURLConnection`类来处理FTP连接和文件操作。然而,这个类并不直观,因此在实际开发中,我们通常会使用第三方库,如Apache Commons Net库。Apache Commons Net提供了一个更友好的API,...
然而,由于Java Applet的安全限制,直接使用`FTPURLConnection`在Applet中进行FTP操作可能会遇到权限问题,因此开发者通常会使用第三方库,如Apache Commons Net,它提供了更强大、更灵活的FTP客户端支持。...
2. **Java标准库中的FTP支持**:Java标准库(JDK)提供`java.net.FTPURLConnection`类,用于通过URL进行FTP操作。然而,这个类的API相对简单,且不支持FTP的一些高级特性,如主动模式、被动模式、SSL/TLS安全连接等...
Java FTP库提供了与FTP服务器交互的能力,使得开发人员可以在Java应用程序中实现文件的上传和下载功能。在"ftpUtils.rar"这个压缩包中,我们很可能是找到了一个Java FTP工具类或库,用于简化FTP操作。 在Java中,最...
3. **错误处理**:编写健壮的代码,处理可能的网络中断、文件不存在等问题。 在实际项目中,JavaFTP客户端通常会封装成一个易于使用的类或服务,以供其他模块调用。例如,`JMyFtpClient`可能是一个自定义的FTP...
2. **Java FTP客户端编程**:在FtpApplet.java中,开发者会使用Java的`java.net.FTPURLConnection`或`java.io.FTPClient`类来实现FTP客户端功能。这些类提供了连接到FTP服务器、登录、改变目录、上传和下载文件等...
Java作为多平台编程的强大语言,提供了丰富的API来实现FTP客户端的功能,包括连接FTP服务器、浏览文件列表以及进行文件上传和下载等操作。本篇将详细介绍如何使用Java通过Socket编程访问FTP服务器并显示所有文件列表...
1. **Java FTP库**: Java标准库提供了一个名为`java.net.FTPURLConnection`的类,但它的功能相对有限。因此,开发者通常会选择第三方库如Apache Commons Net或JSch来增强FTP功能。Apache Commons Net提供了一个完整...
FTP支持两种工作模式:主动模式(Port)和被动模式(Passive),其中被动模式常用于解决防火墙问题。 2. Java FTP编程: 在Java中,我们可以使用`java.net.Socket`类来建立与FTP服务器的连接,但更常见的是使用`...