精华内容
下载资源
问答
  • 核心原理:该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。*如何分片;*如何合成一个文件;*中断了从哪个分片开始。如何分,利用...

    核心原理:

    该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。

    *如何分片;

    *如何合成一个文件;

    *中断了从哪个分片开始。

    如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块的轮子,虽然程序员的天性曾迫使我重新造轮子。但是因为时间的关系还有工作的关系,我只能罢休了。最后我选择了百度的WebUploader来实现前端所需。

    如何合,在合之前,我们还得先解决一个问题,我们如何区分分块所属那个文件的。刚开始的时候,我是采用了前端生成了唯一uuid来做文件的标志,在每个分片请求上带上。不过后来在做秒传的时候我放弃了,采用了Md5来维护分块和文件关系。

    在服务端合并文件,和记录分块的问题,在这方面其实行业已经给了很好的解决方案了。参考迅雷,你会发现,每次下载中的时候,都会有两个文件,一个文件主体,另外一个就是文件临时文件,临时文件存储着每个分块对应字节位的状态。

    这些都是需要前后端密切联系才能做好,前端需要根据固定大小对文件进行分片,并且请求中要带上分片序号和大小。前端发送请求顺利到达后台后,服务器只需要按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件即可。

    为了便于开发,我 将服务端的业务逻辑进行了如下划分,分成初始化,块处理,文件上传完毕等。

    服务端的业务逻辑模块如下

    6d52d22af4f333a5bce63d1d730284ed.png

    功能分析:

    文件夹生成模块

    26a347cac65253ee4d58636a0755f9ea.png

    文件夹上传完毕后由服务端进行扫描代码如下

    011212d50c646e3d98b68bfecc95fd5c.png

    分块上传,分块处理逻辑应该是最简单的逻辑了,up6已经将文件进行了分块,并且对每个分块数据进行了标识,这些标识包括文件块的索引,大小,偏移,文件MD5,文件块MD5(需要开启)等信息,服务端在接收这些信息后便可以非常方便的进行处理了。比如将块数据保存到分布式存储系统中

    166ae6c3030631d3b0bb3fa144dd873a.png

    分块上传可以说是我们整个项目的基础,像断点续传、暂停这些都是需要用到分块。

    分块这块相对来说比较简单。前端是采用了webuploader,分块等基础功能已经封装起来,使用方便。

    借助webUpload提供给我们的文件API,前端就显得异常简单。

    前台HTML模板

    d74754b62ae3bb36d5362d77a7764b37.png

    分则必合。把大文件分片了,但是分片了就没有原本文件功能,所以我们要把分片合成为原本的文件。我们只需要把分片按原本位置写入到文件中去。因为前面原理那一部我们已经讲到了,我们知道分块大小和分块序号,我就可以知道该分块在文件中的起始位置。所以这里使用RandomAccessFile是明智的,RandomAccessFile能在文件里面前后移动。但是在andomAccessFile的绝大多数功能,已经被JDK1.4的NIO的“内存映射文件(memory-mapped files)”取代了。我在该项目中分别写了使用RandomAccessFile与MappedByteBuffer来合成文件。分别对应的方法是uploadFileRandomAccessFile和uploadFileByMappedByteBuffer。两个方法代码如下。

    秒传功能

    31fd5c15b1cb37fbecc3203cc1d14eef.png

    71cd27a67d3cf52edf7cfa940892e300.png

    服务端逻辑

    83630a3189de4e12bffa8e024fe1e4c4.png

    秒传功能,相信大家都体现过了,网盘上传的时候,发现上传的文件秒传了。其实原理稍微有研究过的同学应该知道,其实就是检验文件MD5,记录下上传到系统的文件的MD5,在一个文件上传前先获取文件内容MD5值或者部分取值MD5,然后在匹配系统上的数据。

    Breakpoint-http实现秒传原理,客户端选择文件之后,点击上传的时候触发获取文件MD5值,获取MD5后调用系统一个接口(/index/checkFileMd5),查询该MD5是否已经存在(我在该项目中用redis来存储数据,用文件MD5值来作key,value是文件存储的地址。)接口返回检查状态,然后再进行下一步的操作。相信大家看代码就能明白了。

    嗯,前端的MD5取值也是用了webuploader自带的功能,这还是个不错的工具。

    c469e0f26b6bef8c469a1aa7d09b5d85.png

    控件计算完文件MD5后会触发md5_complete事件,并传值md5,开发者只需要处理这个事件即可,

    fb679c551949d4c95cf408dfe892167e.png

    断点续传

    up6已经自动对断点续传进行了处理,不需要开发都再进行单独的处理。

    在f_post.jsp中接收这些参数,并进行处理,开发者只需要关注业务逻辑,不需要关注其它的方面。

    b9910f062e667ffb44608ea9af2f581a.png

    断点续传,就是在文件上传的过程中发生了中断,人为因素(暂停)或者不可抗力(断网或者网络差)导致了文件上传到一半失败了。然后在环境恢复的时候,重新上传该文件,而不至于是从新开始上传的。

    前面也已经讲过,断点续传的功能是基于分块上传来实现的,把一个大文件分成很多个小块,服务端能够把每个上传成功的分块都落地下来,客户端在上传文件开始时调用接口快速验证,条件选择跳过某个分块。

    实现原理,就是在每个文件上传前,就获取到文件MD5取值,在上传文件前调用接口(/index/checkFileMd5,没错也是秒传的检验接口)如果获取的文件状态是未完成,则返回所有的还没上传的分块的编号,然后前端进行条件筛算出哪些没上传的分块,然后进行上传。

    当接收到文件块后就可以直接写入到服务器的文件中

    5d7915a39a20262346481eab49d51fd1.png

    这是文件块上传的效果

    e86ce9515faf26a1d86f589626c9186f.png

    这是文件夹上传完后的效果

    348af85878dc2807af3799670bd8dbe5.png

    这是文件夹上传完后在服务端的存储结构

    b6b1bad50ed00f4abedd156df362d431.png

    展开全文
  • 前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. ...

    前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。

     

    一. 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协议(网络层)。

     2.HTTP消息的结构

     (1)Request 消息分为3部分,第一部分叫请求行, 第二部分叫http header消息头, 第三部分是body正文,header和body之间有个空行, 结构如下图

     (2)Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分,第一部分叫request line状态行, 第二部分叫request header消息体,第三部分是body正文, header和body之间也有个空行,  结构如下图

     

    下面是使用Fiddler捕捉请求baidu的Request消息机构和Response消息机构:

    因为没有输入任何表单信息,故request的消息正文为空,大家可以找一个登录的页面试试看。

    先到这里,HTTP协议的知识网上很丰富,在这里就不再熬述了。

     

    二. 文件上传的三种实现

    1. Jsp/servlet 实现文件上传

    这是最常见也是最简单的方式

    (1)实现文件上传的Jsp页面 

    (2)负责接文件的FileUploadServlet

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.log4j.Logger;

    // @WebServlet(name = "FileLoadServlet", urlPatterns = {"/fileload"})

    public class FileLoadServlet extends HttpServlet {

        private static Logger logger = Logger.getLogger(FileLoadServlet.class);

        private static final long serialVersionUID = 1302377908285976972L;

        @Override

        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            logger.info("------------ FileLoadServlet ------------");

            if (request.getContentLength() > 0) {           

                   InputStream inputStream = null;

                   FileOutputStream outputStream = null;              

                try {               

                    inputStream = request.getInputStream();

                    // 给新文件拼上时间毫秒,防止重名

                    long now = System.currentTimeMillis();

                    File file = new File("c:/", "file-" + now + ".txt");

                    file.createNewFile();

                    outputStream = new FileOutputStream(file);

                      byte temp[] = new byte[1024];

                      int size = -1;

                      while ((size = inputStream.read(temp)) != -1) { // 每次读取1KB,直至读完

                          outputStream.write(temp, 0, size);

                      }               

                      logger.info("File load success.");

                  } catch (IOException e) {

                      logger.warn("File load fail.", e);

                      request.getRequestDispatcher("/fail.jsp").forward(request, response);

                  } finally {

                      outputStream.close();

                      inputStream.close();

                  }

              }       

              request.getRequestDispatcher("/succ.jsp").forward(request, response);

          }   

      }

    FileUploadServlet的配置,推荐采用servlet3.0注解的方式更方便

    <servlet>

        <servlet-name>FileLoadServlet</servlet-name>

        <servlet-class>com.juxinli.servlet.FileLoadServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>FileLoadServlet</servlet-name>

        <url-pattern>/fileload</url-pattern>

    </servlet-mapping>

     

    (3)运行效果

    点击"submit"

    页面转向文件上传成功的页面,再去C盘看看,发现多了一个文件:file-1433417127748.txt,这个就是刚上传的文件

     

    我们打开看看,发现和原来的文本有些不一样

                 

    结合前面讲的HTTP协议的消息结构,不难发现这些文本就是去掉"请求头"后的"Request消息体"。所以,如果要得到与上传文件一致的文本,还需要一些字符串操作,这些就留给大家了。

    另外,大家可以试试一个Jsp页面上传多个文件,会有不一样的精彩哦o(∩_∩)o ,不解释。

     

    2. 模拟Post请求/servlet 实现文件上传

    刚才我们是使用Jsp页面来上传文件,假如客户端不是webapp项目呢,显然刚才的那种方式有些捉襟见衬了。

    这里我们换种思路,既然页面上通过点击可以实现文件上传,为何不能通过HttpClient来模拟浏览器发送上传文件的请求呢。关于HttpClient ,大家可以自己去了解。

     (1)还是这个项目,启动servlet服务

     (2)模拟请求的FileLoadClient

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import org.apache.commons.httpclient.HttpClient;

    import org.apache.commons.httpclient.HttpStatus;

    import org.apache.commons.httpclient.methods.PostMethod;

    import org.apache.commons.httpclient.methods.multipart.FilePart;

    import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;

    import org.apache.commons.httpclient.methods.multipart.Part;

    import org.apache.log4j.Logger;

    public class FileLoadClient {

        private static Logger logger = Logger.getLogger(FileLoadClient.class);

        public static String fileload(String url, File file) {

            String body = "{}";

            if (url == null || url.equals("")) {

                return "参数不合法";

            }

            if (!file.exists()) {

                return "要上传的文件名不存在";

            }

     

            PostMethod postMethod = new PostMethod(url);

            try {           

                // FilePart:用来上传文件的类,file即要上传的文件

                FilePart fp = new FilePart("file", file);

                Part[] parts = { fp };

                // 对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装

                MultipartRequestEntity mre = new MultipartRequestEntity(parts, postMethod.getParams());

                postMethod.setRequestEntity(mre);

                HttpClient client = new HttpClient();

                // 由于要上传的文件可能比较大 , 因此在此设置最大的连接超时时间

                client.getHttpConnectionManager().getParams() .setConnectionTimeout(50000);

                int status = client.executeMethod(postMethod);

                if (status == HttpStatus.SC_OK) {

                    InputStream inputStream = postMethod.getResponseBodyAsStream();

                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

                    StringBuffer stringBuffer = new StringBuffer();

                    String str = "";

                    while ((str = br.readLine()) != null) {

                        stringBuffer.append(str);

                    }               

                    body = stringBuffer.toString();               

                } else {

                    body = "fail";

                }

            } catch (Exception e) {

                logger.warn("上传文件异常", e);

            } finally {

                // 释放连接

                postMethod.releaseConnection();

            }        

            return body;

        }   

       

        public static void main(String[] args) throws Exception {

            String body = fileload("http://localhost:8080/jsp_upload-servlet/fileload", new File("C:/1111.txt"));

            System.out.println(body);

        }    

    }

     

    (3)在Eclipse中运行FileLoadClient程序来发送请求,运行结果:

    <html><head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><h2>File upload success</h2><a href="index.jsp">return</a></body></html>

    打印了:文件上传成功的succ.jsp页面

     

    有没有发现什么,是不是和前面Jsp页面上传的结果类似?对的,还是去掉"请求头"后的"Request消息体"。 

    这种方式也很简单,负责接收文件的FileUploadServlet没有变,只要在客户端把文件读取到流中,然后模拟请求servlet就行了。

     3.模拟Post请求/Controller(SpringMvc)实现文件上传

     终于到第三种方式了,主要难点在于搭建maven+jetty+springmvc环境,接收文件的service和模拟请求的客户端 和上面相似。

     (1)模拟请求的FileLoadClient未变

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import org.apache.commons.httpclient.HttpClient;

    import org.apache.commons.httpclient.HttpStatus;

    import org.apache.commons.httpclient.methods.PostMethod;

    import org.apache.commons.httpclient.methods.multipart.FilePart;

    import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;

    import org.apache.commons.httpclient.methods.multipart.Part;

    import org.apache.log4j.Logger;

    public class FileLoadClient {   

        private static Logger logger = Logger.getLogger(FileLoadClient.class);

        public static String fileload(String url, File file) {

            String body = "{}";       

            if (url == null || url.equals("")) {

                return "参数不合法";

            }

            if (!file.exists()) {

                return "要上传的文件名不存在";

            }

            PostMethod postMethod = new PostMethod(url);       

            try {           

                // FilePart:用来上传文件的类,file即要上传的文件

                FilePart fp = new FilePart("file", file);

                Part[] parts = { fp };

                // 对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装

                MultipartRequestEntity mre = new MultipartRequestEntity(parts, postMethod.getParams());

                postMethod.setRequestEntity(mre);

                HttpClient client = new HttpClient();

                // 由于要上传的文件可能比较大 , 因此在此设置最大的连接超时时间

                client.getHttpConnectionManager().getParams() .setConnectionTimeout(50000);

                int status = client.executeMethod(postMethod);

                if (status == HttpStatus.SC_OK) {

                    InputStream inputStream = postMethod.getResponseBodyAsStream();

                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

                    StringBuffer stringBuffer = new StringBuffer();

                    String str = "";

                    while ((str = br.readLine()) != null) {

                        stringBuffer.append(str);

                    }               

                    body = stringBuffer.toString();                

                } else {

                    body = "fail";

                }

            } catch (Exception e) {

                logger.warn("上传文件异常", e);

            } finally {

                // 释放连接

                postMethod.releaseConnection();

            }       

            return body;

        }   

        public static void main(String[] args) throws Exception {

            String body = fileload("http://localhost:8080/fileupload/upload", new File("C:/1111.txt"));

            System.out.println(body);

        }

    }

     

    (2)servlet换为springMvc中的Controller

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.log4j.Logger;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RequestMethod;

     

    @Controller

    @RequestMapping("/fileupload")

    public class FileUploadService {

        private Logger logger = Logger.getLogger(FileUploadService.class);

        @RequestMapping(consumes = "multipart/form-data", value = "/hello", method = RequestMethod.GET)

        public void hello(HttpServletRequest request, HttpServletResponse response) throws IOException {        

            response.getWriter().write("Hello, jetty server start ok.");

        }

        @RequestMapping(consumes = "multipart/form-data", value = "/upload", method = RequestMethod.POST)

        public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException {

            String result = "";

            if (request.getContentLength() > 0) {           

                   InputStream inputStream = null;

                   FileOutputStream outputStream = null;              

                try {

                    inputStream = request.getInputStream();

                    // 给新文件拼上时间毫秒,防止重名

                    long now = System.currentTimeMillis();

                    File file = new File("c:/", "file-" + now + ".txt");

                    file.createNewFile();

                    outputStream = new FileOutputStream(file);               

                    byte temp[] = new byte[1024];

                    int size = -1;

                    while ((size = inputStream.read(temp)) != -1) { // 每次读取1KB,直至读完

                        outputStream.write(temp, 0, size);

                    }

                    logger.info("File load success.");

                    result = "File load success.";

                } catch (IOException e) {

                    logger.warn("File load fail.", e);

                    result = "File load fail.";

                } finally {

                    outputStream.close();

                    inputStream.close();

                }

            }       

            response.getWriter().write(result);

        }

    }

     

     (3)启动jetty的核心代码,在Eclipse里面右键可以启动,也可以把项目打成jar报启动

    import org.apache.log4j.Logger;

    import org.eclipse.jetty.server.Connector;

    import org.eclipse.jetty.server.Server;

    import org.eclipse.jetty.server.ServerConnector;

    import org.eclipse.jetty.webapp.WebAppContext;

    public class Launcher

    {   

        private static Logger logger = Logger.getLogger(Launcher.class);

        private static final int PORT = 8080;

        private static final String WEBAPP = "src/main/webapp";

        private static final String CONTEXTPATH = "/";

        private static final String DESCRIPTOR = "src/main/webapp/WEB-INF/web.xml";

        /*

         * 创建 Jetty Server,指定其端口、web目录、根目录、web路径

         * @param port

         * @param webApp

         * @param contextPath

         * @param descriptor

         * @return Server

         */

        public static Server createServer(int port, String webApp, String contextPath, String descriptor) {

            Server server = new Server();

            //设置在JVM退出时关闭Jetty的钩子

            //这样就可以在整个功能测试时启动一次Jetty,然后让它在JVM退出时自动关闭

            server.setStopAtShutdown(true);

            ServerConnector connector = new ServerConnector(server);

            connector.setPort(port);

            //解决Windows下重复启动Jetty不报告端口冲突的问题

            //在Windows下有个Windows + Sun的connector实现的问题,reuseAddress=true时重复启动同一个端口的Jetty不会报错

            //所以必须设为false,代价是若上次退出不干净(比如有TIME_WAIT),会导致新的Jetty不能启动,但权衡之下还是应该设为False

            connector.setReuseAddress(false);

            server.setConnectors(new Connector[]{connector});

            WebAppContext webContext = new WebAppContext(webApp, contextPath);

            webContext.setDescriptor(descriptor);

            // 设置webapp的位置

            webContext.setResourceBase(webApp);

            webContext.setClassLoader(Thread.currentThread().getContextClassLoader());

            server.setHandler(webContext);       

            return server;

        }

        /**

         * 启动jetty服务

         */

        public void startJetty() {

            final Server server = Launcher.createServer(PORT, WEBAPP, CONTEXTPATH, DESCRIPTOR);

            try {

                server.start();

                server.join();           

            } catch (Exception e) {

                logger.warn("启动 jetty server 失败", e);

                System.exit(-1);

            }

        }

     

        public static void main(String[] args) {       

            (new Launcher()).startJetty();

            // jetty 启动后的测试url

            // http://localhost:8080/fileupload/hello

        }   

    }

    springMvc的配置不贴了,大家可以下载源码下来看。

     

    (4)运行效果

    上传包含1W个文件的文件夹,正常

     

    大型文件续传功能正常 。

     

    文件批量上传正常

     

    服务器中已经根据日期+GUID生成了目录

    数据库中也有记录

    后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/

    欢迎入群一起讨论:374992201

    展开全文
  • 文件上传web服务器

    2021-08-09 03:44:56
    文件上传web服务器 内容精选换一换以下内容以Windows系统为例。ssh-keygen -t rsa -b 2048过程中需要:(可选)输入保存的文件名,默认为在“C:\Users\username/.ssh”目录下保存为id_rsa(私钥)和id_rsa.pub(公钥)文件...

    文件上传web服务器 内容精选

    换一换

    c8a5a5028d2cabfeeee0907ef5119e7e.png

    以下内容以Windows系统为例。ssh-keygen -t rsa -b 2048过程中需要:(可选)输入保存的文件名,默认为在“C:\Users\username/.ssh”目录下保存为id_rsa(私钥)和id_rsa.pub(公钥)文件。(可选)设置密钥的密码口令。回显信息如下:普通用户将公钥文件上传至/home/操作系统用户名/

    HPC是高性能计算(High Performance Computing)的简称。通常指以计算为目的,使用了很多处理器的单个计算机系统或者使用了多台计算机集群的计算机系统和环境。能够执行一般个人电脑无法处理的大资料量与高性能的运算。HPC具有超高浮点计算能力,可用于解决计算密集型、海量数据处理等业务的计算需求,如应用于工业设计CAD/CA

    文件上传web服务器 相关内容

    在本地主机和Windows云服务器上分别安装QQ.exe等工具进行数据传输。使用远程桌面连接mstsc方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文件。文件较大时,建议使用部署FTP服务等方式进行数据互传。登录本地主机。使用快捷键“Win+R”打开“运行”窗口。在“打开”栏,输入“mstsc”,打开远程

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(访问方式为HTTPS),实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。SSL保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。鲲鹏性能分析工具支持SSL证书替换功能,为提高安全性,建议替换成自己的证书和公私钥对

    文件上传web服务器 更多内容

    f3b8b8d84706868f201fb0c4780edbab.png

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(访问方式为HTTPS),实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。SSL保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。鲲鹏性能分析工具支持SSL证书替换功能,为提高安全性,建议替换成自己的证书和公私钥对

    f37b9b09b23d9b59f1b2d6c6affcfacc.png

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(访问方式为HTTPS),实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。SSL保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。鲲鹏性能分析工具支持SSL证书替换功能,为提高安全性,建议替换成自己的证书和公私钥对

    402994aa3acda5ebf01ee1c6ade658d0.png

    在本地主机和Windows弹性云服务器上分别安装QQ.exe等工具进行数据传输。使用远程桌面连接mstsc方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文件。文件较大时,建议使用部署FTP服务等方式进行数据互传。登录本地主机。使用快捷键“Win+R”打开“运行”窗口。在“打开”栏,输入“mstsc”,打开

    631651361fa2e5698f6a9d681fb5668c.png

    Web服务端证书用于客户端浏览器和web服务器之间的通讯,实现数据信息在客户端和web服务器之间的加密传输,可以防止数据信息的泄露。为提高安全性,建议替换成自己的证书,并及时更新证书,保证证书的有效性。已成功登录鲲鹏代码迁移工具。只有管理员(portadmin)可以执行生成CSR文件、导入web服务端证书、下载根证书,重启服务和更换工作密

    b139ef593fb8558052cf7d856d8ac3a5.png

    当服务器A和服务器B同时挂载同一文件系统C时,在服务器A上传文件,服务器B同步此文件时存在延时,而单独上传至服务器B则没有延时。需要在两个服务器的挂载参数中增加参数noac,noac表示禁止缓存,强制进行同步写。为了提高性能,NFS客户端缓存文件属性(默认ac),然后每隔一段时间去检查文件属性后更新。在缓存有效期内,客户端不检测服务器上文

    bde960fb156614c03a124ff840e10cb0.png

    在Linux云服务器上安装软件的时候经常会遇到网络不通或者网络源失效的情况,如果这时候有系统对应的ISO文件,就可以比较方便地使用ISO入源。配置本地源需要先确认使用的是哪种包管理器,一般常用的包管理器有三种:yum、apt、zypper。使用yum一般是RHEL-based系统:rhel、centos、euler、fedora使用apt

    91fba63c5e17e5f0e99d0f8174c4b31b.png

    以模型小型化工具的安装用户将需要量化的Caffe模型文件和权重文件上传到Linux服务器任意目录下。本手册以sample包中自带的分类网络模型ResNet-50为例进行说明。使用模型小型化工具对模型完成量化后,需要对模型进行推理,以测试量化数据的精度。推理过程中需要使用和模型相匹配的数据集。以模型小型化工具的安装用户将和模型相匹配的数据集

    ef7fa0a88cabe2097a016125d8d62832.png

    以模型小型化工具的安装用户将需要量化的Caffe模型文件和权重文件上传到Linux服务器任意目录下。本手册以sample包中自带的分类网络模型ResNet-50为例进行说明。使用模型小型化工具对模型完成量化后,需要对模型进行推理,以测试量化数据的精度。推理过程中需要使用和模型相匹配的数据集。以模型小型化工具的安装用户将和模型相匹配的数据集

    c0e51685ecf1c455eed0daf868911dc9.png

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(访问方式为HTTPS),实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。SSL保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。鲲鹏性能分析工具支持SSL证书替换功能,为提高安全性,建议替换成自己的证书和公私钥对

    a4c4c5b28481f97f2139da8bb7c47c58.png

    提供多个业务节点提供共享的日志输出目录,方便分布式应用的日志收集和管理。业务特点:多个业务主机挂载同一个共享文件系统,并发打印日志。大文件小I/O:单个日志文件比较大,但是每次日志的写入I/O比较小。写I/O密集型:业务以小块的写I/O为主。多个业务主机挂载同一个共享文件系统,并发打印日志。大文件小I/O:单个日志文件比较大,但是每次日志

    784dc64e49dbbf1bc7916486d97eab2c.png

    本节指导您基于Linux操作系统环境完成镜像文件快速导入,推荐使用云平台的EulerOS云服务器作为转换镜像格式和生成位表文件的环境。Linux操作系统环境下,建议使用qemu-img-hw工具进行镜像格式转换。已完成镜像文件优化,详细操作请参考优化过程(Windows)或优化过程(Linux);同时需要确保镜像文件符合表1或表1中的限制

    展开全文
  • web 上传文件到ftp服务器上 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到...

    web 上传文件到ftp服务器上 内容精选

    换一换

    c8a5a5028d2cabfeeee0907ef5119e7e.png

    安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使用)使用远程桌面连接MSTSC方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文

    华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。

    web 上传文件到ftp服务器上 相关内容

    本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务,将文件从本地上传到云服务器中。已在待上传文件的云服务器中搭建 FTP 服务。如果您的云服务器为 Windows 操作系统,具体操作请参考 搭建FTP 站点(Windows)。如果您的云服务器为 Linux 操作系统,具体操作请参考 搭建FTP 站点(Linux)。Linux操

    本节操作介绍如何在Windows操作系统的本地主机上使用FTP上传文件到云服务器。已在待上传文件的云服务器中搭建 FTP 服务。如果您的云服务器为 Windows 操作系统,具体操作请参考 搭建FTP 站点(Windows)。如果您的云服务器为 Linux 操作系统,具体操作请参考 搭建FTP 站点(Linux)。在Windows本地主机

    web 上传文件到ftp服务器上 更多内容

    c8670e33c445c10cd2a0fcb5ca15332b.png

    将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式。本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云服务器的操作方法。Windows云服务器可以访问公网。在本地Windows计算机上,单击“开始”,在出现的“搜索程序和文件”输入框中输入mstsc。弹出远程桌面连接对话框。弹出远程桌面连

    f2c4fc7c94b8a6968e9bfbe258188211.png

    本节操作介绍本地Linux操作系统主机通过SCP向Linux云服务器传输文件的操作步骤。登录管理控制台,在ECS列表页面记录待上传文件的云服务器的弹性公网IP。上传文件在本地Linux操作系统主机上执行以下命令,传输文件到Linux操作系统云服务器。scp 本地主机文件地址 用户名@弹性公网IP:云服务器文件地址例如:将本地文件 /hom

    b80c406dd1bff1336ad2b20072f4b1ca.png

    将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式。本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云服务器的操作方法。Windows云服务器可以访问公网。在本地Windows计算机上,单击“开始”,在出现的“搜索程序和文件”输入框中输入mstsc。弹出远程桌面连接对话框。弹出远程桌面连

    a4c4c5b28481f97f2139da8bb7c47c58.png

    WinSCP工具可以实现在本地与远程计算机之间安全地复制文件。与使用FTP上传代码相比,通过 WinSCP 可以直接使用服务器账户密码访问服务器,无需在服务器端做任何配置。通常本地Windows计算机将文件上传至Linux服务器一般会采用WinSCP工具。本节为您介绍本地Windows计算机使用WinSCP工具,上传文件至Linux云服务

    b203ffbda48cf64af447ca0126ea2d66.png

    华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。

    402994aa3acda5ebf01ee1c6ade658d0.png

    当服务器A和服务器B同时挂载同一文件系统C时,在服务器A上传文件,服务器B同步此文件时存在延时,而单独上传至服务器B则没有延时。需要在两个服务器的挂载参数中增加参数noac,noac表示禁止缓存,强制进行同步写。为了提高性能,NFS客户端缓存文件属性(默认ac),然后每隔一段时间去检查文件属性后更新。在缓存有效期内,客户端不检测服务器上文

    c0e51685ecf1c455eed0daf868911dc9.png

    如果待分析/待预检/待对齐/待重构的源码压缩包或软件包大于500MB或者解压后大于1GB,需要手动将源码或者软件包上传至服务器,其他情况可通过Web界面上传功能上传。

    f3b8b8d84706868f201fb0c4780edbab.png

    通过Web浏览器登录主机,提供协同分享、文件传输、文件管理和预置命令等功能。用户在主机上执行的所有操作,被云堡垒机记录并生成审计数据。协同分享指会话创建者将当前会话链接发送给协助者,协助者通过链接登录创建者的会话中参与运维,实现运维协同操作。文件管理指参与会话的用户获取操作权限后,可对云主机和主机网盘中文件或文件夹进行管理。支持新建文件夹

    be6c0fefabcd88eafba576089843e93b.png

    工具中所有涉及上传文件功能的,如果需要上传的文件大于500MB或者解压后大于1GB,需要手动将文件上传至服务器,其他情况可通过Web界面上传功能上传。

    55a2638139d68369d49b3058cd5d88e8.png

    将文件上传至Linux服务器一般会采用WinSCP工具。本节为您介绍本地Windows计算机使用WinSCP工具,上传文件至Linux云服务器的操作方法。以下以CentOS 7.2为例。Linux云服务器可以访问公网。下载 WinSCP 客户端并安装。单击这里下载:https://winscp.net/eng/docs/lang:chs。

    4a3dbebf52c74fe713408ff26033c570.png

    弹性云服务器支持通过内网访问OBS,OBS可供用户存储任意类型的数据。将图片、视频等数据存储至OBS后,在ECS上可以访问OBS,下载桶中的图片或视频等数据。通过内网访问OBS,可以避免因网络不稳定导致的数据传输中断问题,且使用内网访问OBS不收取流量费用,最大化的优化性能、节省开支,提高文件上传成功率。当通过内网访问OBS时,需要确保待

    展开全文
  • web上传本地文件到远程服务器 内容精选换一换将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式。本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云服务器的操作方法。Windows云...
  • 大文件如何快速传输

    2021-08-04 01:24:00
    但是通常来讲,FTP文件传输并不能同时实现这三点的,特别是上传大文件时,FTP上传文件速度明显减慢,那么用户如何快速传输大文件呢?为什么FTP上传大文件传输速度慢?FTP协议自身的机制导致(FTP一个最大的问题就是它...
  • 那么应该怎么做才能快速上传,就算失败了再次发送也能从上次中断的地方继续上传呢?下文为你揭晓答案~温馨提示:配合Demo 源码一起阅读效果更佳整体思路第一步是结合项目背景,调研比较优化的解决方案。文件上传失败...
  • 核心原理:该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。*如何分片;*如何合成一个文件;*中断了从哪个分片开始。如何分,利用...
  • 开源web文件服务器

    2021-08-11 07:42:45
    开源web文件服务器 内容精选换一换简要介绍Lighttpd是一个德国人领导的开源Web服务器软件。其根本的目的是为性能网站的提供安全、快速、兼容性好并且灵活的Web Server环境。Lighttpd具有非常低的内存开销、CPU占用率...
  • linux配置web服务器文件 内容精选换一换如果操作系统环境不可以联网,则需要先参考配置操作系统yum/apt/zypper源配置yum/apt/zypper源。注意下载与服务器硬件平台一致的工具安装包。openEuler,EulerOS,CentOS 8.0...
  • 核心原理:该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。*如何分片;*如何合成一个文件;*中断了从哪个分片开始。如何分,利用...
  • 文件共享web服务器

    2021-08-08 00:21:06
    文件共享web服务器 内容精选换一换本实例中SAP HANA服务器实际的文件系统规划如表2 SAP HANA服务器文件系统所示。SBD卷只需要在主节点云服务器上创建,然后绑定到备节点云服务器上。本实例中SAP HANA云服务器实际的...
  • 功能实现1、axios二次封装2、 单文件上传FROM-DATA,先选文件上传3、 单文件上传BASE64,只能上传小于100K的png或jpg图片文件4、多文件上传FORM-DATA5、多文件拖拽上传FORM-DATA6、大文件切片上传,断点续传FORM-...
  • web文件共享服务器

    2021-08-13 05:36:12
    web文件共享服务器 内容精选换一换在SAP系统中,如果选择共享文件系统由SFS Turbo而非NFS Server提供时,例如:SAP HANA中的backup卷或者shared卷,您需要创建SFS Turbo文件系统,提供共享路径给SAP节点。...
  • 作者:maomin9761 来源:前端历劫之路前言:这里以git bash 工具为例,当然你可以直接用puTTY或者Xshell链接到服务器,用FileZilla 上传文件。一、连接服务器ssh root@你的远程ip地址。二、查看版本uname -a三、安装...
  • 核心原理:该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。*如何分片;*如何合成一个文件;*中断了从哪个分片开始。如何分,利用...
  • 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。 *如何分片; *如何合成一个文件; *中断了从哪个分片开始。 如何分,利用...
  • 我们平时经常做的是上传文件上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post (get方式提交有大小限制,post没有)2....
  • 怎么设置服务器上传文件大小 内容精选换一换文件选择上传控件,用于上传文件。问题现象下载云主机文件到主机网盘,即下载文件到用户个人主机网盘时,提示下载失败错误。上传文件失败,提示/3.0/h5FileService/upload...
  • clobber existing file if any --ymodem use YMODEM protocol -Z, --zmodem use ZMODEM protocol C# 上传文件至远程服务器 C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28| 分类: C#|...
  • php实现web服务器文件

    2021-08-10 08:58:14
    php实现web服务器文件 内容精选换一换Web服务端证书,即鲲鹏性能分析工具的Web服务端与Web浏览器之间通讯的证书。已成功登录鲲鹏性能分析工具。只有管理员用户(tunadmin)可以执行生成CSR文件、导入证书、更换工作...
  • 服务器设置网站文件上传大小 内容精选换一换通过本文档,您可以快速了解华为云CDN的基础知识,如果想了解更多详细信息,可以根据扩展阅读的引导来进行阅读。CDN(Content Delivery Network,内容分发网络)是构建在...
  • 在本文中,给出了5种方法,哪个快您选哪个。不忘了附上 “最速曲线”,用于类比。引言假如有这样一个场景,...根据经验,使用任何使用物理连接的方法(如交换硬盘或通过局域网传输),都比使用快速简单的解决方案(如通...
  • 前端页面代码:上传$(document).ready(function () {$("#btnUpload").click(function () {var formdata = new FormData();var files = $(".file_control");$.each(files, function (index, domEle) {formdata.append...
  • Java实现浏览器端大文件分片上传目录背景介绍项目介绍使用说明获取代码需要知识点启动项目项目示范核心讲解重要原理功能分析分块上传秒传功能断点续传总结背景介绍Breakpoint-http,是不是觉得这个名字有点low,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,141
精华内容 51,256
关键字:

web大文件快速上传