精华内容
下载资源
问答
  • web3.js 中文文档 Web3

    2021-03-09 10:11:04
    web3.js 中文文档 v1.3.4 Web3 这是web3.js库的主(或“伞”)类。 var Web3 = require(‘web3’); Web3.utils Web3.version Web3.givenProvider Web3.providers Web3.modules Web3.模块 Web3.modules 将返回一个...

    web3.js 中文文档

    v1.3.4

    Web3

    这篇讲的是web3.js主要程序内容。

    var Web3 = require('web3');
    
    > Web3.utils
    > Web3.version
    > Web3.givenProvider
    > Web3.providers
    > Web3.modules
    

    Web3.modules(模块)

    Web3.modules
    

    返回一个包含所有主要子模块类的对象,用于手动实例化它们。

    返回(Returns)

    Object:模块构造函数列表:

    • Eth-Constructor:用于与以太坊网络交互的Eth模块( web3.eth ).
    • Net-Constructor与网络属性交互的网络模块( web3.eth.net).
    • Personal-Constructor:与以太坊帐户交互的个人模块( web3.eth.personal).
    • Shh-Constructor:与whisper协议交互的Shh模块( web3.shh ).
    • Bzz-Constructor与swarm交互的网络模块( web3.bzz ).
    举例:
    Web3.modules
    > {
        Eth: Eth(provider),
        Net: Net(provider),
        Personal: Personal(provider),
        Shh: Shh(provider),
        Bzz: Bzz(provider),
    }
    

    Web3实例(Instance)

    Web3类是一个包含所有以太坊相关模块的伞形包。

    var Web3 = require('web3');
    
    // "Web3.providers.givenProvider" will be set if in an Ethereum supported browser.
    var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');
    
    > web3.eth
    > web3.shh
    > web3.bzz
    > web3.utils
    > web3.version
    

    版本(version)

    Web3类的静态可访问属性以及实例的属性。

    Web3.version
    web3.version
    

    包含web3.js库的当前包版本。

    返回(Returns)

    String:当前版本

    例子(Example)
    web3.version;
    > "1.2.3"
    

    工具(utils)

    Web3类的静态可访问属性以及实例的属性。

    Web3.utils
    web3.utils
    

    工具函数也可以在Web3对象中直接获取

    查看更多web3.utils

    设置提供程序(setProvider)

    web3.setProvider(myProvider)
    web3.eth.setProvider(myProvider)
    web3.shh.setProvider(myProvider)
    web3.bzz.setProvider(myProvider)
    ...
    

    可以改变其模块的提供者。

    注意

    当主程序setProvider时,web3还将同时修改所有子模块设置提供程序web3.eth, web3.shh, etc等,除了 web3.bzz,它需要一个单独的提供者。

    参数(Value)

    Object - myProvider :有效的提供者 .

    返回(Returns)

    Boolean

    例子(Example)
    var Web3 = require('web3');
    var web3 = new Web3('http://localhost:8545');
    // or
    var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
    
    // change provider
    web3.setProvider('ws://localhost:8546');
    // or
    web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));
    
    // Using the IPC provider in node.js
    var net = require('net');
    var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path
    // or
    var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
    // on windows the path is: "\\\\.\\pipe\\geth.ipc"
    // on linux the path is: "/users/myuser/.ethereum/geth.ipc"
    ...
    

    供应商(providers)

    web3.providers
    web3.eth.providers
    web3.shh.providers
    web3.bzz.providers
    

    包含当前可用的供应商 .

    参数(Value)

    Object与以下提供商:

    Object -HttpProvider:HTTP提供程序是已弃用,因为它对订阅无效
    Object - WebsocketProvider:Websocket提供程序是旧版浏览器中使用的标准。
    Object - IpcProvider:当运行本地节点时IpcProvider被node.js dapps使用。提供最安全的连接。

    例子(Example)
    var Web3 = require('web3');
    // use the given Provider, e.g in Mist, or instantiate a new websocket provider
    var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546');
    // or
    var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546'));
    
    // Using the IPC provider in node.js
    var net = require('net');
    
    var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path
    // or
    var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
    // on windows the path is: "\\\\.\\pipe\\geth.ipc"
    // on linux the path is: "/users/myuser/.ethereum/geth.ipc"
    

    配置(Configuration)

    // ====
    // Http
    // ====
    
    var Web3HttpProvider = require('web3-providers-http');
    
    var options = {
        keepAlive: true,
        withCredentials: false,
        timeout: 20000, // ms
        headers: [
            {
                name: 'Access-Control-Allow-Origin',
                value: '*'
            },
            {
                ...
            }
        ],
        agent: {
            http: http.Agent(...),
            baseUrl: ''
        }
    };
    
    var provider = new Web3HttpProvider('http://localhost:8545', options);
    
    // ==========
    // Websockets
    // ==========
    
    var Web3WsProvider = require('web3-providers-ws');
    
    var options = {
        timeout: 30000, // ms
    
        // Useful for credentialed urls, e.g: ws://username:password@localhost:8546
        headers: {
          authorization: 'Basic username:password'
        },
    
        clientConfig: {
          // Useful if requests are large
          maxReceivedFrameSize: 100000000,   // bytes - default: 1MiB
          maxReceivedMessageSize: 100000000, // bytes - default: 8MiB
    
          // Useful to keep a connection alive
          keepalive: true,
          keepaliveInterval: 60000 // ms
        },
    
        // Enable auto reconnection
        reconnect: {
            auto: true,
            delay: 5000, // ms
            maxAttempts: 5,
            onTimeout: false
        }
    };
    
    var ws = new Web3WsProvider('ws://localhost:8546', options);
    

    有关Http和Websocket提供程序模块的更多信息,请访问:


    提供程序(givenProvider)

    web3.givenProvider
    web3.eth.givenProvider
    web3.shh.givenProvider
    web3.bzz.givenProvider
    ...
    

    在与以太坊兼容的浏览器中使用web3.js时,它将通过该浏览器设置为当前本机提供程序。将通过(浏览器)环境返回给定的提供程序,否则null ;

    返回(Returns)

    Object:给定的提供程序集或null ;


    供应商(currentProvider)

    web3.currentProvider
    web3.eth.currentProvider
    web3.shh.currentProvider
    web3.bzz.currentProvider
    ...
    

    将返回当前提供程序,否则null

    返回(Returns)

    Object:当前提供程序集或null;


    批量(请求)

    new web3.BatchRequest()
    new web3.eth.BatchRequest()
    new web3.shh.BatchRequest()
    new web3.bzz.BatchRequest()
    

    用来创建和执行批处理请求的类。

    返回(Returns)

    Object:使用以下方法:

    add(request):向批处理调用添加请求对象。
    execute():将执行批处理请求

    例子(Example)
    var contract = new web3.eth.Contract(abi, address);
    
    var batch = new web3.BatchRequest();
    batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
    batch.add(contract.methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, callback2));
    batch.execute();
    

    扩展

    web3.extend(methods)
    web3.eth.extend(methods)
    web3.shh.extend(methods)
    web3.bzz.extend(methods)
    ...
    

    允许扩展web3模块。
    注意
    你也有*.extend.formatters作为用于输入和输出格式化的附加格式化程序函数。请看源文件功能详细信息

    参数(Parameters)

    methods - Object:包含方法数组的扩展对象描述对象如下:

    • property - String:(可选)要添加到模块中的属性的名称。如果没有设置任何属性,它将直接添加到模块中。
    • methods - Array:方法描述的数组:
    • name - String:要添加的方法的名称。
    • call - String:RPC方法名称
    • params - Number:(可选)该函数的参数数。默认值为0。
    • inputFormatter - Array:(可选)inputformatter函数数组。每个数组项都响应一个函数参数,因此如果不希望某些参数格式化,请添加一个null相反
    • outputFormatter - Function:(可选)可用于格式化方法的输出。
    返回(Returns)

    Object:扩展模块

    例子(Example)
    web3.extend({
        property: 'myModule',
        methods: [{
            name: 'getBalance',
            call: 'eth_getBalance',
            params: 2,
            inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputDefaultBlockNumberFormatter],
            outputFormatter: web3.utils.hexToNumberString
        },{
            name: 'getGasPriceSuperFunction',
            call: 'eth_gasPriceSuper',
            params: 2,
            inputFormatter: [null, web3.utils.numberToHex]
        }]
    });
    
    web3.extend({
        methods: [{
            name: 'directCall',
            call: 'eth_callForFun',
        }]
    });
    
    console.log(web3);
    > Web3 {
        myModule: {
            getBalance: function(){},
            getGasPriceSuperFunction: function(){}
        },
        directCall: function(){},
        eth: Eth {...},
        bzz: Bzz {...},
        ...
    }
    

    <<< 返回目录

    展开全文
  • Web基本介绍

    2021-01-22 21:01:46
    Web 基本介绍 1 web 就是 world wide web 的缩写,称之为全球广域网,俗称 WWW。 2 我们可以将 web 理解为就是当前的一种互联网。对于我们来说更多的就是网站服务。 3 网站我们可以认是由多个网页组合在一起而...

    Web 基本介绍

    1 web 就是 world wide web 的缩写,称之为全球广域网,俗称 WWW。 
    
    2 我们可以将 web 理解为就是当前的一种互联网。对于我们来说更多的就是网站服务。 
    
    3 网站我们可以认是由多个网页组合在一起而形成一种服务。 
    
    4 web 前端就是来负责一个网站当中前台网页里的内容。 
    
    5 网页就是由前端工程师使用 HTML 语言编写而成的一种文件,它里面会包含 文字 图片超链接 声音 视频......( 网页本质就是一个 html 文件 ) 
    

    1.3 HTML 基本介绍

    一、定义

    HyperText markup language 超文本标记语言,其中的超指的就是它能表达的内容不仅仅

    只是文字。

    二、HTML 语言发展历史

    1.在互联网最初的时候是没有 HTML 的,我们只能通过网络传输最简单的文字内容 
    
    2.随着用户的要求越来越多,同时也是我们的技术的不断发展,就出了一种可以表达文字 
    
    内容之外的语言---HTML1.0 
    
    3.在最初的时候就是 html1.0----xhtml1.0( 过渡 )----xhtml2.0( 放弃 )------html5 
    

    1.4 HTML 网页骨架

    1 网页是我们通过 HTML 语言来书写。

    2 因为我们需要使用 HTML 语言来书写网页所以我们要有相应的书写代码工作。

    ( Hbuilder )

    3 在我们使用 HTML 语言去书写网页的过程我们会发现有一些结构是默认必须存在的, 这

    个结构我们就叫做 网页(html)骨架

    注意:

    1. DocType html : 向浏览器声明当前的文档是 Html 类型。 
    2. html : 它是网页当中最大的一个标签,我们称之为根标签 
    3. head : 网页头的部,它里面的内容是写给浏览器看的。 
    4. meta : 如果有 charset 那就表示在设置当前网页的显示编码 
    5. title: 网页的标题,它里面的内容会在浏览器的标签页上显示 
    6. body: 网页主体,它里面的内容会显示在浏览器的空白区域内。 
    

    1.5Hbuilder 工具使用

    (省略)

    1.6 HTML 语法和标签基本介绍

    一、HTML 标签

    所谓的标签就是 HTML 语言的发明者人为定义好的一些"单词",它就相当于我们汉语中

    的字。

    二、语法

    语法就是用来定义这些 “字” 应该如何去解析或者书写的规则。

    三、HTML 标签中的常见标签及基本语法

    1.我们人为的将 HTML 标签分为单标签 和 双标签 二种

    <标签名称></标签名称> 
    
    <标签名 /> 
    

    2.常见的标签:

    (1)标题标签 :在 html 当中人为定义了六种标题分别 h1-h6,它们都是双标签。在一个网页当中,我们只允许出现一个 h1。 
    
    (2)段落标签:p 双标签 
    
    (3)换行标签: br 单标签 
    
    (4)空格: & nbsp;
    

    3.标签书写语法

    (1)在 HTML 当中允许多个标签互相嵌套使用,但是不允许交叉嵌套。

    1.7 图片标签

    一、语法

    <img src="地址" />
    

    注意:

    1. img 是一个单标签,它的作用是可以在网页当中插入图片。 
    2. src 是 img 标签的属性,它里面的值称之为属性值,具体用来表示想要加载的图片存 在哪里。 
    3. 标签的身上可以有属性,属性名与标签名之间用空格隔开。 
    4. 属性值与属性名之间用 单等号 连接 
    5. 一个标签的身上可以有多个属性,之间都用空格隔开。 
    

    二、图片常见的属性

    1. Src 设置图片所在位置 
    2. Alt 当图片加载失败的时候会显示它里面的文字 
    3. Width/height 分别用来设置图片宽和 高,如果只设置了宽度或者高度,那么另外一边会自动缩放。 
    4. Title 当鼠标悬停在图片上的时候会显示它里面的文字
    

    1.8 链接标签

    一、语法

    <a href="目标地址"> 内容 </a> 
    

    二、作用

    可以实现在当前页面向新页面进行跳转的操作

    三、属性

    1. Target 这个属性可以设置新页面在哪个窗口打开,当值为_blank 的时候可以在新窗口打开
    2. Href 的属性值设置为 # 的时候,可以设置为空链接,它的作用就是当用户点的时候不会发生跳转。 
    

    1.9路径

    所谓的路径我们可以看做是在程序代码中用来查找某个具体的资源所 "走"过的路。例如:

    ​		C:/Users/Administrator/Desktop/_book\img\2.png. 
    

    一、绝对路径

    绝 对 路 径 一 般 是 以 盘 符 为 起 点 来 进 行 查 找 , 或 者 就 是 一 个 绝 对 URL 地 址 。 
    https://www.baidu.com/img/bd_logo1.png ,
    但是在实际的工作中,我们不建议大家使用绝对路径。 
    

    二、相对路径

    相对路径就是相对某一个已知的文件为起点进行资源的查找。

    1.10相对路径用法

    路径是一个通用的存在,我们当以查找图片为例来讲解路径的使用。在实际工作中 相对路径使用的频率是最高的。我们人为的将相对路径分为三种:同级路径、下级路径、上级路径。(以查找图片为例的含义就是我们要在一个 HTML 网页中插入一张 HTML 文件之外的图片,同时采用的是相对路径,所以这里的相对起点就是 HTML 网页)

    1. 同级路径:同级指的就是 HTML 网页和目标图片在同一级目录里。对于同级路径的使用,

    我们只需要在 src 中写入目标图片的名称即可。

    1. 下级路径:下级指的就是图片在 html 文件的下级目录中。此时我们需要使用一个 / 来

    向下进行穿透查找。(下的

    1. 上级路径: 图片在 html 文件的上级目录里, 时我们需要使用 …/ 来向上回退进行查找。 此

    注:

    1. 上述的路径规则虽然都是以查找图片为例,但是总结的规律适用于其它类型资源的 
    
    查找。 
    
    2. / 表示向下级查找,可以无限级穿透。 
    3. ../ 表示向上级返回,同样可以无限级返回。 
    

    1.11表单基本介绍

    表单就是一种在互联网上用于收集用户信息的一种结构,在 HTML 当中事先定义好一个标签来完成这件事。标签名称叫 form ,它是一个双标签,我们称之为表单域。

    <form action="" method=""></form>
    

    注:

    1. form 标签就是 HTML 当中定义好的一个用来表示整个表单结构的双标签,我们称之 为表单域。 
    2. form 默认就相当于一张"白纸",如果想让它收集用户的相关信息,HTML 里又准备 了很多的表单标签。这些标签里 使用最多的一个叫 input 。 
    3. action 属性值表示将当前表单中的数据提交到哪些。 
    4. method 属性值表示以 什么样试来提交当前表单中的数据。最常见的就是 get,post 。其中 get 方式就是指将数据在 URL 中进行提交,这种方式是明文。所以相对不安全。而 POST 方式就是指将数据写在 HTTP 请求的 请求体当中( )。 
    

    1.12常见的表单元素

    From 标签只负责定义具体的表单整体,它里面如果想要收集用户数据,就必须再有一些能

    够让用户进行输入填写的模块,此时 HTML 当中就定义许多的 表单标签 来让用户完成输

    入。最常见的表单标签就是 Input ,因为标签名称都叫 input ,所以 HTML 当中就设置通

    过 type 属性来进行区分。

    1. 文本输入框: <input type="text" /> 
    2. 密码输入框: <input type="password " /> 
    3. 提交按钮: <input type="submit" /> 
    4. 单选框: <input type="radio" /> 
    5. 复选框: <input type="checkbox" /> 
    6. 文本域: <textarea rows="行数" cols="列数"></textarea> 
    7. 下拉框: <select><option value="">选项 1</option> </select>
    8. 重置按钮: <input type="reset" /> 
    9. 普通按钮: <input type="button" value="按钮" /> 
    

    1.13 表单元素注意细节

    1. name 属性:form 表单通过不同的表单元素来收集数据,在这个过程中很多的表单元素名 称都叫 input ,此时如果直接将这些数据提交到后台,就会出现这些数据无法区分的问题, 此时为了分别哪个数属于什么样的表单项。我们就人为的在 Input 身上设置 name 属性。这 样一来数据到达后端之后就会变成以下格式:

      username="syy" 
      
       pwd="123"
      
       gender="男".... 
      
    2. value: 它的作用就是定义某些表单元素的默认显示内容( 文本输入框、提交按钮、重置

    按钮、普通按钮 )

    1. checked: 这是一个属性并且它的属性值就等于这个属性名。用来设置单选和复选框中的默 认被选中的某些。
    2. selected:这也是一个属性值等于属性名的属性,添加在下拉选项身上实现某个选项被默

    认选中。

    1.14 CSS 基本介绍

    一、web 标准

    ​ 所谓的 web 标准指的就是一系统规范网页写的要求,它是由 W3C 组织制定,在它

    里面要求网页的 结构、样式、行为 三者相分离。

    二、名词解释

    1.结构:就是通过 HTML 标签搭建的网页的结构。 
    
    2.样式:就是通过 CSS 对当前的网页结构进行修饰和美化 
    
    3.行为:通过 JS 让网页可以理解用户的一些操作。从而用户与网页之间产生交互。 
    

    1.15 CSS 基本使用

    一、定义

    ​ Css 在国内被称之为级联样式表、层叠样式表、样式表,它的作用就是修饰当前网页中

    的 HTML 元素。

    二、基本使用步骤

    1. CSS 与 HTML 可以看做是二门 互相独立的语言, 时如果想用 CSS 来操作 HTML 那么 此

    就需要先将二者建立关系。

    1. 此时在 HTML 当中就准备了一个叫 style 的标签( 它是一个双标签 ),在这个标签对之

    间就可以用来书写我们的 CSS 代码。常见的存放位置可以是 head 标签里 title 标签下。

    1. 通过 CSS 的选择器找到我们想要操作的元素然给它设置样式( 写在 style 标签之中 )

    1.16 体验 CSS

    1. 常见的 CSS 元素属性:

    width 定义元素宽度单位是 px ,

    height 定义高度,

    background-color 设置背景颜色。

    1. CSS 代码书写的固定语法:

      选择器{ CSS 代码 }

    2. 建议大家在开发阶段将 CSS 样式分行写,且每行的结尾用==;== 结束。

    1.17CSS 选择器

    一、定义

    ​ 所谓的 CSS 选择器就是 CSS 中已经定义好的用来选中某些元素的固定语法。 的作用 它

    就是选中我们想要设置样式的元素。

    二、CSS 选择器的分类

    在 CSS 中有很多种选择器,我们人为的分成二大类: 简单选择器 + 复合选择器。

    三、简单选择器:

    1. 标签名选择器:通过具体的 HTML 标签名称来选择元素。【会将当前网页中所有叫该名

    字的标签都选中】

    1. 类名选择器:通过标签类名来选择元素
    2. Id 选择器:通过 id 名称选择元素。

    1.18 类名选择器

    一、为什么需要类名选择器

    ​ 一个完整的网页需要很多标签组合在一起进行编写实现,因为 HTML 标签的种类有限,

    所以同名的一个标签有可以会在一个网页中出现多次。 此时如果想对这些同名的标签分别设

    置不相同的样式。那么直接使用标签名选择器就没有办法实现。这种情况下我们就可以使用

    类名选择器。

    二、类名选择器的基本使用步骤

    1. 定义 HTML 网页结构,然后在我们想选中的元素身上设置 class 属性。
    2. 将我们想要一起选中的元素们 身上设置相同的 class 属性值( 类名 )
    3. 此时我们只需要在 style 标签中按着固定的语法来调用我们的类名: .类名

    1.19Id 选择器

    一、为什么需要 id 选择器

    如果我们只想从一堆元素当中选中其中的某一个元素,那么就可以使用 id 选择器。这

    个 id 就和人的身份证号是一样的。

    二、Id 选择器使用

    1. 在我们想要选中的元素身上设置一个 id 属性。
    2. 给这个 id 属性设置一个值,我称为 id 名。
    3. 在 style 当中通过固定的语法来进行调用: #id 名{}
    4. 注:要求在一个网页当中不能出现同名的 id 值【虽然有效果但也不能这么做】

    1.20 简单选择器总结

    1. 标签名选择器和类名选择器 默认可以一次性选中多个元素,id 名选择器一次只能选中一

    个元素。

    1. 一个标签的身上可以既具有类名又具有 id 名,且这二个属性值是可以相同的。
    2. 允许一个标签的身上同时设置多个类名,要求多个类名之间用空格隔开。
    3. 关于 id 选择器要求一个页面当中同一个 id 名称只能出现一次。

    1.21 id 名与类名命名规则

    1. 名称不能是纯数字或者以数字开头( 但是我们经常会以数字结尾 )
    2. 名称不能使用中文
    3. 名称包特殊字符( - _ )
    4. 起名字时要做到见名知意

    1.22 元素展示类型

    ​ 在 HTML 当中本身定义了很多的元素,这些元素默认在网页上展示的时候会存在自已

    默认的状态,例如有些元素默认情况下宽高属性不起作用,有些元素默认情况下都独占一行

    显示。 种现象我们就称之为元素展示类型, 这为了记忆我们人为的将元素展示类型分为三种: 块元素、行内元素、行内块元素。

    1. 块元素:当同时存在多个块元素的时候,每个块元素都会独占一行显示,且默认情况

    下它的宽高属性可以起作用。

    1. 行内元素:当同时存在多个行内元素的时候,这些元素都会显示在一行,如果一行放

    不下自动折行。默认情况下它的宽高属性不起作用

    1. 行内块元素:当同时存多个行内块元素的时候,这些元素会显示在一行,默认情况下

    它的宽高属性起作用。

    1. 注:不需要去死记哪些元素是行内,哪些是块,哪些是行内块。

    1.23 布局标签补充

    1. div 标签,它是 HTML 当中定义好的一个双标签( DIV+CSS )。我们人为的认为它是一个体

    积最大的标签。

    1. span 标签,它也是一个双标签,主要用来放文字,我们人为的认为这体积很小。
    2. 段落标签里不能包裹标题,因为浏览器不能正常解析。

    1.24 元素展示类型转换

    在我们进行网页布局过程中往往会遇到一些"特殊的模块",对于这种模块来说我们之前的一

    些常见标签在使用的时候就会显示 “语义” 有些不对应,所以我们可以使用相应的标签进行

    强制的类型转换,从而让它可以展示成 设计稿 上的样子。在 CSS 当中有一个 display 属

    性,可以设置不同的值来完成元素类型的转换。

    1. 转成块元素: display:block;
    2. 转成行内块:display:inline-block
    3. 转成行内元素:display:inline; none

    1.25简单选择器权重

    ​ 权重:我们就可以理解为是不同类型的 CSS 选择器在对同一个元素进行样式设置的时候,出 现的控制能力不同的现象。
    对于简单选择器来说 : id 选择器 》 类名选择器 》 标签名选择器

    1.26 CSS 特性

    1. 在权重相同的情况下,同一个元素后写的 CSS 样式会覆盖先写的 CSS 样式。【覆盖性】

    2. CSS 的定义存在继承的特点,子元素会继承父元素的一些样式【继承性】

      (1) 不是所有的 CSS 属性都可以被继承。

      (2) 不是所有类型的元素都会去继承祖先元素的样式( 继承一般发生在块元素的身 上)

      (3) 继承指的就是子元素可以使用祖先元素的一些样式

    3. 同选择器对同一个元素的 CSS 控制能力存在着强弱。【优先级】

    1.27 复合选择器

    一、为什么需要复合选择器

    ​ 在实际的网而制做过程中往往会出现很多结构层级嵌套很深的现象, 而这种结构模块又

    很多,大家使用的标签名称又一样。所以此时我们就可以通过复合选择器,将这些简单选择

    器进行组合。从而让我们选择元素变得简单。

    二、常见的复合选择器:

    1.后代选择器:这种选择器就是以某一个元素为起点,将它做为祖先然后不停的向下进行

    穿透查找,去选择它下面的后代元素。

    起点元素 后代元素 …{ 设置样式 }

    注:

    1. 后代选择器当中的每个部分都可以采用任意的简单选择器代替。 
    2. 不同的部分之间要用空格隔开。 
    3. ...... 就表示可以不停的向下层查找。 
    

    2.并列选择器:就是将多个选择器使用 逗号 进行连接,表示同时选中这些元素,然后设置相同的样式。其中每个部分的选择器都可以由任意类型的选择器构成。

    1.28 选择器权重总结

    1. 简单选择器: id 名 》 class 名 》 element 名
    2. 复合选择器: 需要在大家明白的就是复合选择器由多个其它类型选择器组合而成,为了方

    便比较,我们人为的给每个简单选择器都定义了一个数值,分别是: Id(100) class(10)

    ele(1),这三个数值我们也称之为权重值,有了它们之后只需要将当前选择器中出现的权重值

    进行相加求,最终的结果就是该选择器的权重。数值越大的权重越大

    1. 切记权重比的就是不同选择器对同一个元素的控制力比较( 区别继承的影响 )

    1.29 CSS 文件存放位置

    CSS 代码可以被我们放在很多的地方,习惯性的有三种写法:内嵌 CSS 、外链 CSS、行内 CSS 。

    1. 内嵌 CSS 指的就是将 CSS 代码写在 html 网页中。
    2. 外链 CSS 指的就是就将 CSS 代码写在外部的独立 CSS 文件中。
    3. 行内 CSS 指的就是将 CSS 代码写在具体的 HTML 标签身上 。

    注:

    1. 依据浏览器渲染页面原理,我们选将 CSS 代码写在 HTML 文件靠前的位置。
    2. 使用外链 CSS 写法的时候,外部独立的 CSS 文件当中不需要写 style 标签,同时还

    需通过 link 标签将某个 CSS 文件引入到具体的 HTML 文件当中。 rel 属性对不要省略

    []

    1. 对于上述的三种 CSS 文件存放位置来说,行内 CSS 的权重是最高,但是外链与内

    嵌并不存在谁一定大于谁的现象( 权重 ),它的控制能力完全取决于各自所使用的选择器权

    重。

    1. 如果想要直接将某一个样式的权提至最高,我们只需要在该句 CSS 代码的最后设

    P{ color:pink!important; } 
    

    1.9 音频标签

    <audio autoplay controls loop> 
    降级的说明性文字 
    <source src="格式 1 路径" /> 
    ....... 
    </audio> 
    

    注:

    1. audio 是一个双标签,用来定义一个声音资源模块。
    2. autoplay 用来设置自动播放。
    3. controls 调用当前设备的播放控制。
    4. loop 设置当前音频循环播放。
    5. 默认 audio 里的文字不显示,只有在当前浏览器不支持这个标签的时候会显示文

    字。

    1.30 常见的文字样式

    1. 行高: line-height, 当我们将行高的大小设置成当前元素的高度时,可以实现单行文本在

    当前元素中垂直方向居中显示的效果。

    1. 水平对齐方式:text-align: left | center | right ,分别表示设置文字在当前盒子当中水平的对齐。
    2. 字体大小: font-size ,单位是 px ,一般情况下浏览器都会有一个最小的显示字体。
    3. 字体粗细: font-weight,可以设置关键字,或者数值( 100-900 ). 关键字有 normal 表示正 常,还有 bold 表示加粗。
    4. 字体名称: font-family ,一般常用的就是 “微软雅黑”“黑体”
    5. 字体颜色: color ,可以设置颜色单词,还可以是十六进制的数字。

    1.31 文字阴影

    一、字体样缩写

    Font: 文字粗细 大小/行高 字体名称;

    Font: bold 20px/200px ‘微软雅黑’;

    二、CSS3 中的文字阴影

    Text-shadow: x y r color;

    Text-shadow: 0px 0px 0px red;

    注:

    1. x 表示阴影在水平方向的偏移量,可以设置负值,正负不表示大小,只表示方向。

    水平向右为正,向左为负,单位是 px

    1. y 表示阴影在垂直方向的偏移量,垂直向上为负,向下为正
    2. r 表示阴影的模糊程度,数值越大阴影越模糊 ,单位 px
    3. color 表示阴影的颜色
    4. C3 允许一段文字有多层阴影,多层之间用逗号隔开,每一层内,不同参数之间用空

    格隔开。

    1.32 过渡属性

    ​ 过渡属性的作用就是在元素的默认样式与最终样式变化之间产生一个过程。在 C3 中新增了 一个属性叫 transition

    Transition: all 1s linear 0s; 
    

    注:

    1. 第一个参数的作用是设置元素身上的哪些属性产生过渡,一般用 all 表示所有的属 
    
    性都过渡。 
    
    2. 第二个参数的作用设置过渡需要时长,单位是 s 不要省略 
    3. 第三个参数的作用设置过渡的动画形式,linear 表示匀速 
    4. 第四个参数设置当前过渡等待多久之后才会执行( 延时 )。即使为 0 ,单位也不能 
    
    省。 
    
    5. :hover 选择某个元素被鼠标移上时的状态。 
    6. transition 这个属性既可以添加在元素默认状态,也可以添加在鼠标移上状态,区别 
    
    就是第二种做法在鼠标离开的时候不会在有过渡变化。
    
    展开全文
  • package utils; import sun.misc.BASE64Encoder; ... import java.io.UnsupportedEncodingException; import java.net.URLEncoder;...public class DownLoadUtils { ... public static String encodeFileName...
    package utils;
    
    import sun.misc.BASE64Encoder;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    
    public class DownLoadUtils {
    
        public static String encodeFileName(HttpServletRequest request, String fileName) {
            String name = "";
    
            String agent = request.getHeader("User-Agent");
            System.out.println(agent);
            try {
                if (agent.contains("Firefox")) {
                    BASE64Encoder base64Encoder = new BASE64Encoder();
                    name = "=?UTF-8?B?" + new String(base64Encoder.encode(fileName.getBytes("UTF-8"))) + "?=";
                } else {
                    name = URLEncoder.encode(fileName, "UTF-8");
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //System.out.println(name);
            return name;
        }
    }
    
    
    展开全文
  • 一、实现效果 二、实现效果 2.1、文件分片下载思路 2.2、文件分片下载的后端实现 ...①首先定义文件下载请求、分段下载的接口且编写...* 分片数量、文件的md5值、文件扩展类型、文件名称】请求; * 生成该请求.

    一、实现效果

    .NET Core WebApi基础入门项目源码下载

    二、实现效果

    2.1、文件分片下载思路

    2.2、文件分片下载的后端实现 

    ①首先定义文件下载请求、分段下载的接口且编写

    /***
    *	Title:".NET Core WebApi" 项目
    *		主题:文件控制
    *	Description:
    *		功能:
    *		    2-下载文件流程:
    *		        ①接受前端上传文件的预览信息【文件大小、
    *		           分片数量、文件的md5值、文件扩展类型、文件名称】请求;
    *		           生成该请求的guid,存在缓存中,返回对应消息。
    *		        ②根据获取到的文件分片数量循环请求文件分片数据进行下载
    *		          【也可单独请求下载某一文件片段流数据】
    *	Date:2021
    *	Version:0.1版本
    *	Author:Coffee
    *	Modify Recoder:
    */
    
    using log4net;
    using Microsoft.AspNetCore.Mvc;
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    using Utils;
    using WebApiUtils;
    
    namespace WebApi_Learn.Controllers
    {
    
        [Route("api/[controller]")]
        [ApiController]
        public class FileController : ControllerBase
        {
            #region   基础参数
            //日志
            private readonly ILog _log = LogManager.GetLogger(WebApi_Learn.Startup.repository.Name, typeof(FileController));
    
            #endregion
    
    
    
            #region   公有方法
    
            /// <summary>
            /// 请求下载文件
            /// </summary>
            /// <param name="fileInfo">文件参数信息[name]</param>
            /// <returns></returns>
            [HttpPost, Route("RequestDownload")]
            public MessageEntity RequestDownloadFile([FromBody] Dictionary<string, object> fileInfo)
            {
                //string path = $".{GetFilePath(AppConfigHelper.GetUploadFileBasePath)}";
                //DirectoryInfo root = new DirectoryInfo(path);
                //FileInfo[] files = root.GetFiles();
                //foreach (var item in files)
                //{
                //    _log.Debug($"{path} 目录下的文件为:"+item.Name);
                //}
                return RequestDownloadFile(fileInfo,AppConfigHelper.GetUploadFileBasePath, _log);
            }
    
    
            /// <summary>
            /// 分段下载文件
            /// </summary>
            /// <param name="fileInfo">请求参数信息[index,name]</param>
            /// <returns></returns>
            [HttpPost, Route("Download")]
            public async Task<IActionResult> FileDownload([FromBody] Dictionary<string, object> fileInfo)
            {
               return await FileDownload(fileInfo,AppConfigHelper.GetUploadFileBasePath, _log);
            }
    
            #endregion 
    
    
    
            #region   私有方法
    
            /// <summary>
            /// 请求下载文件
            /// </summary>
            /// <param name="fileInfo">文件参数信息[name]</param>
            /// <param name="fileBasePath">下载文件的基础路径</param>
            /// <param name="log">日志</param>
            /// <returns>返回消息实体</returns>
            private MessageEntity RequestDownloadFile([FromBody] Dictionary<string, object> fileInfo, string fileBasePath, ILog log)
            {
                MessageEntity message = new MessageEntity();
                string fileName = string.Empty;
                string fileExt = string.Empty;
                if (fileInfo.ContainsKey("name"))
                {
                    fileName = fileInfo["name"].ToString();
                }
                if (fileInfo.ContainsKey("ext"))
                {
                    fileExt = fileInfo["ext"].ToString();
                }
                if (string.IsNullOrEmpty(fileName))
                {
                    message.Code = -1;
                    message.Msg = "文件名不能为空";
                    return message;
                }
                //获取对应目录下文件,如果有,获取文件开始准备分段下载
                string filePath = GetFilePathAndName(fileBasePath, fileName);
                filePath = $"{filePath}{fileExt}";
                log.Debug($"下载文件的路径:{filePath}");
                FileStream fs = null;
                try
                {
                    if (!System.IO.File.Exists(filePath))
                    {
                        //文件为空
                        message.Code = -1;
                        message.Msg = $"请求的:{filePath} 文件不存在!";
                        return message;
                    }
                    fs = new FileStream(filePath, FileMode.Open);
                    if (fs.Length <= 0)
                    {
                        //文件为空
                        message.Code = -1;
                        message.Msg = "文件尚未处理完";
                        return message;
                    }
                    int shardSize = 1 * 1024 * 1024;//一次1M
                    RequestFileUploadEntity request = new RequestFileUploadEntity();
                    request.fileext = fileExt;
                    request.size = fs.Length;
                    request.count = (int)(fs.Length / shardSize);
                    if ((fs.Length % shardSize) > 0)
                    {
                        request.count += 1;
                    }
                    request.filedata = GetCryptoString(fs);
    
                    message.Data = request;
                }
                catch (Exception ex)
                {
                    log.Debug($"读取文件信息失败:{filePath},错误信息:{ex.Message}");
                }
                finally
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                }
    
                return message;
            }
    
    
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="fileInfo">文件信息</param>
            /// <param name="fileBasePath">下载文件的基础路径</param>
            /// <param name="log">日志</param>
            /// <returns></returns>
            private async Task<IActionResult> FileDownload([FromBody] Dictionary<string, object> fileInfo, string fileBasePath, ILog log)
            {
                //开始根据片段来下载
                int index = 0;
                if (fileInfo.ContainsKey("index"))
                {
                    int.TryParse(fileInfo["index"].ToString(), out index);
                }
                else
                {
                    return Ok(new { code = -1, msg = "缺少参数" });
                }
                string fileName = string.Empty;
                string fileExt = string.Empty;
                if (fileInfo.ContainsKey("name"))
                {
                    fileName = fileInfo["name"].ToString();
                }
                if (fileInfo.ContainsKey("ext"))
                {
                    fileExt = fileInfo["ext"].ToString();
                }
                if (string.IsNullOrEmpty(fileName))
                {
                    return Ok(new { code = -1, msg = "文件名不能为空" });
                }
                //获取对应目录下文件,如果有,获取文件开始准备分段下载
                string filePath = GetFilePathAndName(fileBasePath, fileName);
                filePath = $"{filePath}{fileExt}";
                if (!System.IO.File.Exists(filePath))
                {
                    return Ok(new { code = -1, msg = "文件尚未处理" });
                }
                using (var fs = new FileStream(filePath, FileMode.Open))
                {
                    if (fs.Length <= 0)
                    {
                        return Ok(new { code = -1, msg = "文件尚未处理" });
                    }
                    int shardSize = 1 * 1024 * 1024;//一次1M
                    int count = (int)(fs.Length / shardSize);
                    if ((fs.Length % shardSize) > 0)
                    {
                        count += 1;
                    }
                    if (index > count - 1)
                    {
                        return Ok(new { code = -1, msg = "无效的下标" });
                    }
                    fs.Seek(index * shardSize, SeekOrigin.Begin);
                    if (index == count - 1)
                    {
                        //最后一片 = 总长 - (每次片段大小 * 已下载片段个数)
                        shardSize = (int)(fs.Length - (shardSize * index));
                    }
                    byte[] datas = new byte[shardSize];
                    await fs.ReadAsync(datas, 0, datas.Length);
                    //fs.Close();
                    return File(datas, "application/octet-stream");
                }
            }
    
    
            /// <summary>
            /// 获取上传文件的路径和名称
            /// </summary>
            /// <param name="fileBasePath">文件的基础路径</param>
            /// <param name="fileName">文件名称</param>
            /// <returns></returns>
            private static string GetFilePathAndName(string fileBasePath, string fileName)
            {
                string path = $".{fileBasePath}{DateTime.Now.ToString("yyyy-MM-dd")}/{fileName}";
                return path;
            }
    
    
            /// <summary>
            /// 文件流加密
            /// </summary>
            /// <param name="fileStream">文件流</param>
            /// <returns></returns>
            private string GetCryptoString(Stream fileStream)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] cryptBytes = md5.ComputeHash(fileStream);
                return GetCryptoString(cryptBytes);
            }
    
            /// <summary>
            /// 字节加密
            /// </summary>
            /// <param name="cryptBytes"></param>
            /// <returns></returns>
            private string GetCryptoString(byte[] cryptBytes)
            {
                //加密的二进制转为string类型返回
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < cryptBytes.Length; i++)
                {
                    sb.Append(cryptBytes[i].ToString("x2"));
                }
                return sb.ToString();
            }
    
           
            #endregion 
    
    
        }//Class_end
    }
    

    ②定义消息、请求上传文件实体

    /***
    *	Title:".NET Core WebApi" 项目
    *		主题:消息实体
    *	Description:
    *		功能:XXX
    *	Date:2021
    *	Version:0.1版本
    *	Author:Coffee
    *	Modify Recoder:
    */
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
     
    namespace Utils
    {
        public class MessageEntity
        {
            private int _Code = 0;
            private string _Msg = string.Empty;
            private object _Data = new object();
     
            /// <summary>
            /// 状态标识
            /// </summary>
            public int Code { get => _Code; set => _Code = value; }
     
            /// <summary>
            /// 返回消息
            /// </summary>
            public string Msg { get => _Msg; set => _Msg = value; }
     
            /// <summary>
            /// 返回数据
            /// </summary>
            public object Data { get => _Data; set => _Data = value; }
     
        }//Class_end
    }
    /***
    *	Title:".NET Core WebApi" 项目
    *		主题:请求文件上传实体
    *	Description:
    *		功能:XXX
    *	Date:2021
    *	Version:0.1版本
    *	Author:Coffee
    *	Modify Recoder:
    */
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
     
    namespace Utils
    {
        public class RequestFileUploadEntity
        {
            private long _size = 0;
            private int _count = 0;
            private string _filedata = string.Empty;
            private string _fileext = string.Empty;
            private string _factoryid = string.Empty;
            private string _filename = string.Empty;
     
            /// <summary>
            /// 文件大小
            /// </summary>
            public long size { get => _size; set => _size = value; }
     
            /// <summary>
            /// 片段数量
            /// </summary>
            public int count { get => _count; set => _count = value; }
     
            /// <summary>
            /// 文件md5
            /// </summary>
            public string filedata { get => _filedata; set => _filedata = value; }
     
            /// <summary>
            /// 文件类型
            /// </summary>
            public string fileext { get => _fileext; set => _fileext = value; }
     
            /// <summary>
            /// 工厂id
            /// </summary>
            public string factoryid { get => _factoryid; set => _factoryid = value; }
     
            /// <summary>
            /// 文件名
            /// </summary>
            public string filename { get => _filename; set => _filename = value; }
     
     
        }//Class_end
    }

    三、运行程序测试

    3.1、跨域错误

    运行后发现是跨域错误【跨域内容介绍请查看:(CORS) 启用跨域请求 ASP.NET Core | Microsoft Docs

    3.2、跨域设置

    ①在 【Startup--->ConfigureServices】方法下注册跨域策略

       #region   跨域设置
     
                //允许所有
                services.AddCors(options =>
                {
                    options.AddPolicy("AllowAll", p =>
                    {
                        p.SetIsOriginAllowed(hostName => true)
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials();
                    });
                });
     
                只是示例,具体根据自身需要
                //services.AddCors(options =>
                //{
                //    options.AddPolicy("AllowSome", p =>
                //     {
                //         p.WithOrigins("https://www.baidu.com")
                //         .WithMethods("GET", "POST")
                //         .WithHeaders(HeaderNames.ContentType, "x-custom-header");
                //     });
                //});
     
                #endregion

    ②在【startup-->Configure】方法下使用注册好的的跨域策略

      #region   使用跨域 (UseCors必须配置为在对 UseRouting 和 UseEndpoints的调用之间执行)
                app.UseCors("AllowAll");
     
      #endregion 

     3.3、运行测试成功下载

    四、上传文件使用的简单Html页面(之Layui) 

    4.1、到Layui官网下载基础包

    Layui - 经典开源模块化前端 UI 框架

     4.2、编写前端的文件分片上传界面和逻辑

    ①解压下载好的Layui框架包,然后修改test.html名为【uploadOrDownloadFile.html】

     ②查看Layui上传文件示例编写分片上传文件逻辑

    图片/文件上传模块文档 - Layui

    <html>
    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <link rel="stylesheet" href="layui/css/layui.css">
    </head>
    
    <body>
        <div>
            <button type="button" class="layui-btn" id="btnDownload">下载</button>
        </div>
        <script src="layui/layui.js"></script>
        <script>
            var form;
            var $;
            var succeed = 0, shardCount = 0;
            var t1;
    
            layui.use(['upload', 'form', 'element'],
                function () {
                    form = layui.form;
                    $ = layui.$;
                    var upload = layui.upload;
                    var element = layui.element;
                    var host = "http://localhost:47918/api/File/";
     
                    $("#btnDownload").on("click", function (e) {
                        downloadRequest();
                    });
    
                    function downloadRequest() {
                        //请求文件
                        var data = {
                            name: 'Lexmark_XM1145_UsersGuide_sc',
                            ext: '.pdf',
                        };
                        //Ajax提交
                        $.ajax({
                            url: host + "RequestDownload",
                            type: "POST",
                            data: JSON.stringify(data),
                            type: "POST",
                            dataType: "json",
                            contentType: "application/json; charset=utf-8",
                            timeout: 36000,
                            success: function (res) {
                                if (res.code === -1) {
                                    //layer.alert(decodeURIComponent(res.msg));
                                    console.log(res);
                                    return;
                                } else {
                                    console.log(res.data);
                                    //拿到文件开始分片下载
                                    var count = res.data.count;
                                    var filedata = res.data.fieldata;
                                    var fileext = res.data.fileext;
                                    var size = res.data.size;
                                    maxCount = count - 1;
                                    download();
                                    window.clearInterval(t1);
                                }
                            }
                        });
                    }
    
                    var maxCount = 0;
                    var index = 0;
                    function download() {
                        var data = {
                            index: index,
                            name: 'Lexmark_XM1145_UsersGuide_sc',
                            ext: '.pdf',
                        };
                        //console.log(index);
                        //console.log(maxCount);
                        //Ajax提交
                        $.ajax({
                            url: host + "Download",
                            type: "POST",
                            data: JSON.stringify(data),
                            type: "POST",
                            dataType: "json",
                            contentType: "application/json; charset=utf-8",
                            timeout: 36000,
                            success: function (res) {
                                console.log(index + ":over");
                                index++;
                                if (index <= maxCount) {
                                    download();
                                }
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                console.log(textStatus);
                                console.log(index + ":errorover");
                                index++;
                                if (index <= maxCount) {
                                    download();
                                } else {
                                    console.log("下载完成");
                                }
                            }
                        });
                    }
                });
    
        </script>
    </body>
    
    </html>

     参考文章:net core WebApi——文件分片下载 - AprilBlank

    展开全文
  • 更多关于WEB服务器使用的协议是内容请关注好文网篇一:web服务器的搭建与管理web服务器的搭建与好文网为大家准备了关于访问WEB服务器时使用的协议是范文,好文网里面收集了五十多篇关于好访问WEB服务器时使用的协议是...
  • 2、web tomcat:默认是ISO8859-1,不支持中文的3.java.nio.charset.Charset.defaultCharset()获得平台默认字符编码;4.getBytes() 是通过平台默认字符集进行编码;二、引入在学习任何一门技术时...
  • 前言前两天在把一个小Java Web项目部署到实验室的服务器上时,出现了一个比较蛋疼的问题——搜索栏中文查询无结果。我当时就惊了,明明各个地方都加编码格式声明了啊,怎么会这样?结果折腾了很久,从浏览器到数据库...
  • Web服务器,一般是指“Web服务器,也称为“WWW服务器”(英文全写:World Wide Web,翻译成中文:万维网或环球信息网),主要功能是“供给网上信息阅读服务”。WWW是Internet(互联网)的多媒体信息查询工具,是Internet...
  • SOAP:简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议...
  • 1.基础软件 纯文本编辑器编写代码——Visual Studio Code 版本控制系统——Git(图形化工具SourceTree或者小乌龟) Web浏览器——chrome 2.设计网站外观
  • 我们导入导出 Excel 到时候肯定会放在 Web 端进行操作,所以来看看如何去使用 一、读 读的话是简单的,我们来看一下 API 可以看到哈,这里还支持 io 流,也就是说,我们前端传进来的文件,我们可以通过流的形式...
  • 如何配置web服务器

    2021-04-10 11:03:32
    配置web服务器的方法:一、IIS的安装一般在安装操作系统时不默认安装IIS,所以在次Web服务器配置时需要安装IIS。安装方法为:1、打开“控制面板”,打开“添加/删除程序”,弹出“添加/删除程序”窗口。2、单击窗口...
  • 如下,swagger配置成功后Show/Hide 无法显示为中文 修改swagger.js 为嵌入的资源即可
  • 更改此处后重启tomcat,清除浏览器缓存方可生效
  • 1 Web 开发介绍2 HTTP协议简介3 HTML简介4 WSGI接口5 ...随着互联网的兴起,人们发现,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Serv.
  • WebApi接口传参详解

    2021-06-05 07:41:06
    (2)WebApi的方法名称不以get开头 我们把之前的方法名由GetByModel改成FindByModel,这个再正常不过了,很多人查询就不想用Get开头,还有直接用Query开头的。这个有什么关系吗? $.ajax({ type: "get", url: ...
  • web前端实习报告

    千次阅读 2020-12-20 22:23:56
    web前端实习报告 (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分实 习 报 告学生姓名: 学 号: 专业班级: 实习单位: 实习时间: 校外指导教师: 校内...
  • 此处参照MetaCoin创建自己的模拟转账Dapp 名称为RuoliCoin 1、创建工作目录 创建RuoliCoin目录,在此目录下打开命令行 执行 Truffle 初始化命令,如下:truffle unbox webpack 即可创建基础Truffle框架。...
  • 比如有个项目Blog;默认情况下,我们发布到Tomcat,要运行项目。浏览器地址是这样的: ...比如Tomcat作为Web服务器,Eclipse Package Explorer 视图下有 :我们打开server.xml,我们在最下...
  • 文章目录Educoder Web练习题 1 Web前端开发概述第1关:Web前端开发相关的概念相关知识Web系统的组成Web开发浏览器URLWWWhttp网站Web标准自主实训第2关:Web前端开发相关的技术相关知识基本应用技术...
  • 《PHP实战:Yii2隐藏frontend/web和backend/web的方法》要点:本文介绍了PHP实战:Yii2隐藏frontend/web和backend...名字 Yii (读作 `易`)在中文里有 “极致简单与不断演变” 两重含义,也可看作 **Yes It Is**! 的缩...
  • align对齐文本和图片时,其实也是有一定的偏差的,如下图: vertical-align的middle值实际上是相对于小写字母x的一半高度来说的,所以图片会跟x的中间开始对齐,但是其他字符譬如S、中文,就会发现无论如何都会出现...
  • WebApi参数传递一些坑

    2021-05-25 14:14:52
    WebApi的默认路由规则为:routeTemplate: “api/{controller}/{id}”, 下面为我们统一将它改为 routeTemplate: “api/{controller}/{action}/{id}”,这样我们在调用的时候,还是通过拼接方法名来识别,不用考虑上面...
  • web简介

    2021-06-25 10:39:50
    一、 web的诞生 internet:因特网,国际互联网 Internet常用的服务: (1) E-mail:电子邮件 (2) FTP:文件传输 (3) BBS:电子公告 (4) www:万维网,也叫web (5) web:internet的一个应用。 二、 web的相关概念 WWW...
  • Web项目的开发中,常常会遇到各种各样的字符乱码的问题,对于小白来说有时候一个小小的问题会耗费很长时间才能够解决。 因此本文将开发过程中可能遇到的字符乱码问题,做出一个小总结,供大家参考。 要想解决...
  • Web3.0 使用说明书

    2021-12-13 00:22:51
    Web3的优势 由于以太坊具备去中心化特性,许多Web3工程师选择了开发dapp(dapp就是D+app,d是英文单词decentralization的首字母,单词翻译中文是去中心化,即dapp为去中心化应用。),网络上的所有人都有使用Web3...
  • 搭建Web服务器

    2021-08-01 06:48:52
    原标题:搭建Web服务器前言在直播中,创建房间,获取房间,都需要服务器,因此需要搭建Web服务器Web服务器能处理HTTP请求的服务器都可以叫Web服务器Node.js介绍Node.js什么时候出现,2009年,Ryan Dahl(瑞恩·达尔)...
  • Web前端开发相关概念

    2021-01-23 16:56:45
    Web前端开发概述
  • web前端是什么

    2021-04-20 01:45:17
    web前端也被称为“客户端”,是关于...web前端从网页制作演变而来,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是Web1.0时代的产物,早期网站主要内容都是静态,以图片和文字为主,用户使用网站的...
  • 搭建java WEB开发环境和应用更新时间:2009年06月07日 02:28:56 作者:使用Tomcat服务器,使用DBCP数据源搭建Web开发环境一 使用Tomcat服务器,使用DBCP数据源搭建Web开发环境1.JDK安装,默认路径即可2.Tomcat5.5...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,507
精华内容 85,802
关键字:

web中文名称