aix传输文件太大会失败

aix传输文件太大会失败,第1张

文件一般是流式处理的。您会读一点处理一点。如果文件有个记录结构,一般您一次读入一个记录就可以了。用个循环把全部记录处理完。XML 文件如果是有个容器根节点,您每次只要足以读入一个二级节点,放进 XmlDocument 处理就可以了。目的很简单,就是用很小的内存把事情办了。这在 Web Server 要处理很大数量的并发请求的时候尤其重要。

假设遇到了一种极端情况,非要把 200G 的文件上载完以后才能处理,或者说直接存储起来吧,那让接收请求的模块一边接收一边写入文件就可以。硬盘的容量和内存比起来,就不是一个数量级了,容纳很多并发的请求都在上传大文件也没什么好怕的。我是说,它不会拖死服务器。如果硬盘空间快用光了,切断通讯就是,也不至于会拖死服务器。

=== 回答题主的问题 ===

HTTP 协议对于所谓大文件传输,超高速传输之类是没有限制的。估计所指的限制是说 TCP/IP 协议层面的问题。

HTTP 协议里面,通讯包头字段以后的 entity 数据区,是很干净的数据区,没有什么边角的浪费。如果能保持可靠的连接,您无休止传输一个永不知道最终大小的内容都是可行的。

如果通讯条件恶劣,下载大文件可以利用断点续传机制。上传大文件的“断点续传”印象里 HTTP 没有这方面的支持,但具体 Web 应用可以自定义一些机制。

=== 由于评论区有字数限制,我放在这里回复 ===

entity数据区是什么样子的?我举个例子说 表单提交 可以设置为是否是二进制提交方式 如棚山神果表单包含了文件处理的话 那么 这个entity数据区就是一个IO流 包括里面的名值对也被二进制拿出来了 如果不包含文件的表单 直接get提交 也会放在entity区中吗?还有这个entity区就是一楼答主所说的 web网络缓存区?

Form 提交可以是两个方式,一个是 Get,表单数据放在 URL 参数里面,也就是在 HTTP 通讯包的第一行发送出去;一个是 Post,表单数据放在 entity 里面。由于担心被攻击,Web Server 一般都限定了 URL 行的最大尺寸,所以稍大一些的表单一般都是通过 Post 方式提交的。

如果需要“提交”二进制的内容,比如上传一个很大的文件,那么整个文件链亏都是放在 entity 里面就可以了。不过 HTTP 里面提供了上传文件的特定方式,RFC1867,样子和一般 Form 提交有点类似,文件内容(和表单普通字段内容一起)是用一种 multipart 方式打包的,我在网上随便找了一段例子:

POST xxxx HTTP/1.1

Host: xxxx

Content-Length: 473

Content-Type: multipart/form-databoundary=----WebKitFormBoundaryW49oa00LU29E4c5U

------WebKitFormBoundaryW49oa00LU29E4c5U

Content-Disposition: form-dataname="myText"

hello world

------WebKitFormBoundaryW49oa00LU29E4c5U

Content-Disposition: form-dataname="upload1"filename="file1.txt"

Content-Type: text/plain

This is file1.

------WebKitFormBoundaryW49oa00LU29E4c5U

Content-Disposition: form-dataname="upload2"filename="file2.txt"

Content-Type: text/plain

This is file2, it's bigger.

------WebKitFormBoundaryW49oa00LU29E4c5U--

这个 multipart 方式大概是从 SMTP 协议里面借鉴过来的。如果用这种方式上传文件,那么很多现有的 Web Server 都可以理解的,开发成本较低。Web 浏览器的 file upload 机制就是用的上述方式,开发起来直接用,很方便。

但这不是唯一的方式。前端可以和 Web Server 或者其下具体的 Web 应用约定好,HTTP 请求里面的 entity 具体采用什么唯游打包方式。比如前端是一个专用 App,不是浏览器。

一、使用ulimit -a查看系统当前配置

# ulimit -a

core file size (blocks, -c) 1048575

data seg size (kbytes, -d) 131072

file size (blocks, -f) 1048575

max memory size (kbytes, -m) 32768

open files (-n) 2000

pipe size (512 bytes, -p) 64

stack size (kbytes, -s) 32768

cpu time (seconds, -t) unlimited

max user processes (-u) 262144

virtual memory (kbytes, -v) unlimited

二、编辑ulimit默认配置文件/etc/security/limits,找到如下设置:

default:

fsize = 2097151

三、将文件最大尺寸限制更改为无限制,如下:

default:

fsize = -1

四、登出用户后,重新登录,再次查看文件大小限制:拍亩

# ulimit -a

core file size (blocks, -c) 1048575

data seg size (kbytes, -d) 131072

file size (blocks, -f) 耐贺手unlimited

max memory size (kbytes, -m) 32768

open files (-n) 2000

pipe size (512 bytes, -p) 64

stack size (kbytes, -s) 32768

cpu time (seconds, -t) unlimited

max user 昌嫌processes (-u) 262144

virtual memory (kbytes, -v) unlimited


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12212251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存