kkfileview(4)

2021SC@SDUSC

文件上传

先说一下原理

.Http协议原理简介

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

    简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。

 1.特点:

  (1)支持客户/服务器模式。

  (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  (4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  (5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

  注意:其中(4)(5)是面试中常用的面试题。虽然HTTP协议(应用层)是无连接,无状态的,但其所依赖的TCP协议(传输层)却是常连接、有状态的,而TCP协议(传输层)又依赖于IP协议(网络层)。
 

文件在预览之前需要上传至本地文件夹,因此有工具类downloadutils

1.获取文件真实路径

    private static String getRelFilePath(String fileName, FileAttribute fileAttribute) {
            String type = fileAttribute.getSuffix();
            if (null == fileName) {
                UUID uuid = UUID.randomUUID();
                fileName = uuid + "." + type;
            } else { // 文件后缀不一致时,以type为准(针对simText【将类txt文件转为txt】)
                fileName = fileName.replace(fileName.substring(fileName.lastIndexOf(".") + 1), type);
            }
            String realPath = fileDir + fileName;
            File dirFile = new File(fileDir);
            if (!dirFile.exists() && !dirFile.mkdirs()) {
                logger.error("创建目录【{}】失败,可能是权限不够,请检查", fileDir);
            }
            return realPath;
        }

 2. 判断文件来源,ftp/http

若来源于http,调用FileUtils中的copyUrlToFile方法 => 此方法URL对应的文件复制一份

     if (isHttpUrl(url)) {
                    File realFile = new File(realPath);
                    FileUtils.copyURLToFile(url,realFile);
                }

若来源于ftp,构造ftputils类,调用其中的download方法,主要通过ftpclient进行文件的读写

     URL url = new URL(ftpUrl);
            String host = url.getHost();
            int port = (url.getPort() == -1) ? url.getDefaultPort() : url.getPort();
            String remoteFilePath = url.getPath();
            LOGGER.debug("FTP connection url:{}, username:{}, password:{}, controlEncoding:{}, localFilePath:{}", ftpUrl, username, password, controlEncoding, localFilePath);
            FTPClient ftpClient = connect(host, port, username, password, controlEncoding);
            OutputStream outputStream = new FileOutputStream(localFilePath);
            ftpClient.enterLocalPassiveMode();
            boolean downloadResult = ftpClient.retrieveFile(new String(remoteFilePath.getBytes(controlEncoding), StandardCharsets.ISO_8859_1), outputStream);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧日的群星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值