`
yangyangmyself
  • 浏览: 229661 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FtpURLConnection 图片下载编码问题

    博客分类:
  • Java
阅读更多
写道
问题:
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编码

 

 

写道
为什么Web项目中,在执行下载前通过System.setProperties("file.encoding","UTF-8")设置編码,仍然提示FileNotFoundException即编码问影响,设置不起作用?

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源码

 

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;
}

 

 

  • 大小: 77.5 KB
  • 大小: 65.7 KB
分享到:
评论

相关推荐

    ftp网络下载

    * 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static void downLoadByUrl(String urlStr, String fileName, String savePath) throws ...

    Java毕业设计-基于SSM框架的大学生社团管理系统带lw(源码+演示视频+说明).rar

    Java毕业设计-基于SSM框架的大学生社团管理系统带lw(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:438】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 实现了社长管理,社团信息管理,社团分类管理,社团加入信息管理,社团成员登记管理,活动信息管理等功能。

    基于javaEE+Mysql实现的超市积分管理系统(源码+数据库sql+论文+视频齐全)

    【作品名称】:基于javaEE+Mysql实现的超市积分管理系统(源码+数据库sql+论文+视频齐全) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 超市会员积分管理系统主要用于实现了企业管理数据统计等。本系统结构如下: (1)网络会员管理中心界面: 会员修改密码信息模块:实现会员密码功能; 会员登陆模块:实现会员登陆功能; 会员注册模块:实现会员注册功能; 留言板模块:实现留言板留言功能 (2)后台管理界面: 系统用户管理模块:实现管理员的增加、查看功能; 会员信息管理模块:实现会员信息的增加、修改、查看功能; 注册用户管理模块:实现注册用户的增加、修改、查看功能; 会员卡管理模块:实现会员卡信息的增加、查看功能; 商品销售管理模块:实现商品信息的增加、查看功能; 会员积分管理模块:实现合作公司信息的增加、查看功能; 信息统计模块:实现数据统计报表功能; 留言板模块:实现留言板信息的增加、修改、查看功能;

    node-v6.9.4-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.13.1-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    learn.py

    learn.py

    node-v18.9.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    《深度学习入门:基于Python的理论与实现》 动手写的代码.zip

    《深度学习入门:基于Python的理论与实现》 动手写的代码.zip

    基于JSP毕业设计-数据库连接池的研究与实现(源代码+论文).zip

    基于JSP毕业设计-数据库连接池的研究与实现(源代码+论文).zip 在基于JDBC的数据库实际应用开发中,对数据库连接的管理是一个重点也是一个难点,频繁对数据库的连接与关闭操作、多客户对数据库的并发访问,一定程度上决定了WEB系统的响应以及应用性能。使用数据库连接池方式能对数据库的连接进行管理和维护,上层应用程序通过数据库连接池使用数据库资源能提升系统性能,充分利用系统资源。文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为高效的连接池管理策略,在这种策略思想的指导下实际开发出一个数据库连接池模块,使得上层应用通过本连接池访问数据库资源变得相对高效和容易,从实际上论证了这种设计方案的可行性。 关键词:连接池;数据库;JDBC;并发访问

    node-v0.12.12-darwin-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    什么是银行家算法以及举例

    银行家算法(Banker's Algorithm)是一种用于避免系统中进程死锁(Deadlock)的算法。在操作系统中,并行进程可能会因为资源竞争而进入死锁状态,即每个进程都在等待系统资源,但没有进程能够继续执行。银行家算法是一种资源分配算法,它根据当前系统资源状态来做出资源分配决策,以确保进程能够安全地请求和释放资源,从而避免死锁的发生。 银行家算法基于以下假设和原则: 1. 每个进程提前声明自己所需的最大资源数目,以及当前已分配和剩余的资源数目。 2. 在分配资源之前,系统会检查该分配是否会导致未来的资源不足,如果不会,就分配资源;如果可能导致资源短缺,则不分配资源,直到可以确保分配不会导致死锁。 3. 系统会维护一个安全序列,保证当前系统状态下没有进程会因为资源分配不足而无法继续执行。 银行家算法的主要步骤如下: 1. 将进程的最大需求矩阵max[][]、当前占用资源矩阵alloc[]和剩余资源矩阵available[]进行初始化。 2. 判断每个进程的需要资源和剩余资源是否匹配,如果匹配则分配资源,更新占用资源矩阵和剩余资源矩阵。 3. 判断是否存在安全序列,如果存在则执行

    MCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    node-v6.12.3-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v19.7.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    高斯课堂-讲义 学习资料

    高斯课堂-讲义 学习资料

    node-v4.9.0-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.17.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于物理模型+深度学习的MPI重建方法.zip

    基于物理模型+深度学习的MPI重建方法.zip

    基于SSM+JSP的课程辅导网站毕业设计(源码+录像+说明).rar

    基于SSM+JSP的课程辅导网站毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:421】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 这次开发的课程辅导网站有学生,教师,管理员。 管理员功能有教师信息管理,学生信息管理,教学资源管理,推荐课程管理,公告信息管理。 教师功能有教学资源管理,推荐课程管理,公告信息管理。 学生功能有查看和收藏教学资源信息,查看和收藏推荐课程信息。

    node-v6.14.2-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics