工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

文件上传,断点续传

 文件下载之断点续传(客户端与服务端的实现)

https://www.cnblogs.com/zhaopei/p/download.html
 
文件各种上传,离不开的表单
http://www.cnblogs.com/zhaopei/p/upload.html
 
Golang实现断点续传
https://www.cnblogs.com/7explore-share/p/8111720.html
 
阿里云上传文件
https://helpcdn.aliyun.com/document_detail/32147.html
 

Go语言实现文件断点续传功能—resumable file uploads

 

HTTP 断点续传(分块传输)

https://blog.csdn.net/liang19890820/article/details/53215087
 
 
HTTP Range 请求
HTTP Range请求允许服务器向客户端发送HTTP消息体的一部分数据。Partial Requests在使用比较大的网络媒体文件或者在下载文件时提供暂停和恢复功能时很有用。
这也是下载时实现HTTP断点续传的一个关键。
 
HTTP 206 (Partial Content)
如果服务器能返回HTTP 206请求,我们就知道它能够支持Range request.
# curl -I https://www.baidu.com/ -H "Range: bytes=0-"
 
 
下载续传,一般WEB服务器,如nginx,apache,iis已支付,只在客户端实现即可
上传续传,也叫分片上传,需要分别在服务端,客户端实现
服务端针对分片的处理,获取当前的分片,每个分片上传保存,然后将分片合并
 
 
---
一些思路
提供一个思路,上传前先往数据库插入一条数据。数据包含文件要存的路径、文件名(用GUID命名,防止同名文件冲突)、文件MD5(用来识别下次续传和秒传)、临时文件块存放路径、文件是否完整上传成功等信息。
然后如果我们断网后再传,首先获取文件MD5值,看数据库里面有没上传完成的文件,如果有就实现秒传。如果没有,看是不是有上传了部分的。如果有接着传,如果没有则重新传一个新的文件。
 

webstorm 2017 激活破解方法大全

 webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊。

方法一:(更新时间:2018/4/8)v3.3


注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址:

http://im.js.cn:8888 (新,感谢 [ qq_34394012 ])

点击:Activate即可。

方法二:获取注册码


打开网址(IntelliJ IDEA 注册码),我们能看到下面的界面,直接点击获取激活码,将生成的激活码粘贴到WebStorm激活对话框中的Lisence Code输入框,点击OK即可破解。

 

http://xiazai.xiazaiba.com/Soft/W/WebStorm_2017.3_XiaZaiBa.zip?pcid=30429&filename=WebStorm_2017.3_XiaZaiBa.zip&downloadtype=xiazaiba_seo

centos 远程安装

 yum install -y wget

cd /boot
wget http://mirrors.163.com/centos/6.9/os/x86_64/images/pxeboot/initrd.img
wget http://mirrors.163.com/centos/6.9/os/x86_64/images/pxeboot/vmlinuz
 
vi /boot/grup/grup.conf
add
 
title CentOS reinstall
       root (hd0,0)
        kernel /vmlinuz headless hostname=localhost ip=192.168.0.104 noipv6 netmask=255.255.255.0 gateway=192.168.0.1 dns=114.114.114.114 ksdevice=eth0 method=http://mirrors.163.com/centos/6.9/os/x86_64/ lang=en_US keymap=us
        #kernel /vmlinuz vnc vncpassword=123456 headless hostname=localhost ip=192.168.0.104 noipv6 netmask=255.255.255.0 gateway=192.168.0.1 dns=114.114.114.114 ksdevice=eth0 method=http://mirrors.163.com/centos/6.9/os/x86_64/ lang=en_US keymap=us
       initrd /initrd.img

golang 编译

 go编译的时候默认会将代码和行号包含到gdb调试信息里,使用gdb还是可以看见源码,编译的时候加-ldflags "-s -w"可以去掉调试信息。

ubuntu shell兼容问题

 dpkg-reconfigure dash

VIM 蓝色注释看不清楚

 通过putty或者securecrt连到linux服务器,使用vi编辑*.php 或*.c文件时,

蓝色的注释很淡,看不清,看起来很费眼

效果如下

我本身有习惯于默认配色,不想修改配色方案,只想把看不清蓝色的注释换掉,修改成目录的蓝色

翻了翻相关资料,大部分都是修改配色方案,最后发现可以通过hi命令来修改注释的颜色。

hi指令使用方法

设置关键字为蓝色非粗体 :hi Identifier ctermfg =blue cterm =none (bold 就设置成粗体)

那我们的问题就可以通过添加一条hi指令解决了

 

1. vi ~/.vimrc 加入如下内容

hi Comment ctermfg =blue //蓝色

hi Comment ctermfg=6 //浅绿色

2.修改后效果

 

以下是vim不同关键字字体颜色修改方法

修改字符串颜色

hi String ctermfg =darkred

修改类型颜色

hi Type ctermfg =yellow

修改数字颜色

hi Number ctermfg =darkblue

修改常量颜色

hi Constant ctermfg =blue

修改声明颜色

hi Statement ctermfg =darkyellow

深入解析ABI

 https://zhuanlan.zhihu.com/p/27574211

Solidity 官方文档中文版

 

内部-优化器

Solidity 优化器是在汇编级别上的操作,所以它也可以同时被其他语言所使用。它将指令的(执行)次序,在JUMP 和 JUMPDEST上分成基本的块。在这些块中,指令被解析 。 堆栈、内存或存储上的每一次修改,都将作为表达式被记录。该表达式包括一条指令以及指向其他表达式的一系列参数的一个指针。现在的主要意思是要找到相等的表达式(在每次输入),做成了表达式的类。优化器首先在已知的表达式列表里找,若找不到的话,就根据constant + constant = sum_of_constants  或 X * 1 = X  来简化。 因为这样做是递归的,如果第二个因子是一个更复杂的表达式,我们也可以应用latter规则来计算。存储和内存位置的修改,是不知道存储和内存的位置的区别。如果我们先写到的位置x,再写到位置y , x,y均是输入变量。第二个可以覆写第一个,所以我们不知道x是存放在y之后的。另一方面,如果一个简化的表达式 x-y 能计算出一个非零常数,我们就知道x存放的内容。

在这个过程结束时,我们知道,表达式必须在堆栈中结尾,并有一系列对内存和存储的修改。这些信息存储在block上,并链接这些block。此外,有关堆栈,存储和内存配置的信息会转发到下一个block。如果我们知道所有的 JUMP 和 JUMPI 指令,我们可以建立一个完整的程序控制流图。如果我们不知道目标块(原则上,跳转目标是从输入里得到的),我们必须清除所有输入状态的存储块上的信息,(因为它的目标块未知)。如果条件计算的结果为一个常量,它转化为一个无条件jump。

作为最后一步,在每个块中的代码完全可以重新生成。从堆栈里block的结尾表达式开始,创建一个依赖关系图。每个不是这个图上的操作将舍弃。现在能按照原来代码的顺序,生成对存储和内存修改的代码(舍弃不必要的修改)。最后,在正确位置的堆栈上,生成所有的值。

这些步骤适用于每一个基本块, 如果它是较小的,用新生成的代码来替换。如果一个基本块在JUMPI上进行分割,在分析过程中,条件表达式的结果计算为一个常数,JUMP就用常量值进行替换。代码如下

 

使用命令行编译器

一个 Solidity 库构建的目标是solc, Solidity命令行编译器。使用solc –help  为您提供所有选项的解释。编译器可以产生不同的输出,从简单的二进制文件,程序集的抽象语法树(解析树)到gas使用的估量。如果你只想编译一个文件,你运行solc –bin sourceFile.sol , 将会打印出二进制。你部署你的合约之前,使用solc –optimize –bin sourceFile.sol 来激活优化器。如果你想获得一些solc更进一步的输出变量,可以使用solc -o outputDirectory –bin –ast –asm sourceFile.sol,(这条命令)将通知编译器输出结果到单独的文件中。

命令行编译器会自动从文件系统中读取输入文件,但也可以如下列方法,提供重定向路径prefix=path :

solc github.com/ethereum/dapp-bin/=/usr/local/lib/dapp-bin/ =/usr/local/lib/fallback file.sol

该命令告诉编译器在/usr/local/lib/dapp-bin目录下,寻找以github.com/ethereum/dapp-bin/  开头的文件,如果找不到的话,到usr/local/lib/fallback目录下找(空前缀总是匹配)。

solc不会从remapping目标的外部,或者显式定义的源文件的外部文件系统读取文件,所以要写成 import “/etc/passwd”;     只有增加 =/ 作为remapping,程序才能工作。

如果remapping里找到了多个匹配,则选择有共同的前缀最长的那个匹配。

如果你的合约使用了  libraries ,你会注意到字节码中包含了 form LibraryName 这样的子字符串。你可以在这些地方使用solc 作为链接器,来插入库地址 :

Either add –libraries “Math:0x12345678901234567890 Heap:0xabcdef0123456”    提供每个库的地址, 或者在文件中存放字符串(每行一个库)

然后运行solc,后面写 –libraries fileName.

如果solc后面接着 –link 选项,所有输入文件将被解释为未链接的二进制文件(十六进制编码), LibraryName形式如前所述, 库此时被链接(从stdin读取输入,从stdout输出)。在这种情况下,除了–libraries,其他所有的选项都将被忽略(包括 -o)

提示和技巧

  • 在数组中使用delete,就是删除数组中的所有元素。

  • 使用较短的类型和结构元素,短类型分组在一起进行排序。sstore操作可能合并成一个单一的sstore,这可以降低gas的成本(sstore消耗5000或20000 gas,所以这是你必须优化的原因)。使用天gas的价格估算功能(优化器 enable)进行检查!

  • 让你的状态变量公开,编译器会免费创建 getters 。

  • 如果你结束了输入或状态的检查条件,请尝试使用函数修饰符。

  • 如果你的合约有一个功能send, 但你想使用内置的send功能,请使用 address(contractVariable).send(amount)。

  • 如果你不想你的合约通过send接收ether,您可以添加一个抛出回退函数 function() { throw; }.。

  • 用单条赋值语句初始化存储结构:x = MyStruct({a: 1, b: 2});

陷阱

不幸的是,还有一些编译器微妙的情况还没有告诉你。

  • 在for (var i = 0; i < arrayName.length; i++) { ... },  i的类型是uint8,因为这是存放值0最小的类型。如果数组元素超过255个,则循环将不会终止。

列表

 
http://wiki.jikexueyuan.com/project/solidity-zh/miscellaneous.html