Ruby on rails Apache基准多部分/表单数据

Ruby on rails Apache基准多部分/表单数据,ruby-on-rails,performance,benchmarking,apachebench,Ruby On Rails,Performance,Benchmarking,Apachebench,我在apache基准测试post文件中遇到了一个奇怪的问题 我需要强调一个处理文件上传的功能。所以,我在谷歌上搜索了一下,发现了一篇描述如何正确构建post文件的帖子。其内容如下: --1234567 Content-Disposition: form-data; name="user_id" 3 --1234567 Content-Disposition: form-data; name="file"; filename="cf_login.png" Content-Type: image/

我在apache基准测试post文件中遇到了一个奇怪的问题

我需要强调一个处理文件上传的功能。所以,我在谷歌上搜索了一下,发现了一篇描述如何正确构建post文件的帖子。其内容如下:

--1234567
Content-Disposition: form-data; name="user_id"

3
--1234567
Content-Disposition: form-data; name="file"; filename="cf_login.png"
Content-Type: image/png

[base64 encoded file content]
--1234567--
ab线是这样的:

$ ab -c 1 -n 5 -v 4 -T 'multipart/form-data; boundary=1234567' -p post_file.txt http://localhost:3000/files
ab发出请求时,生成的标头如下所示:

INFO: POST header == 
---
POST /files.json/ HTTP/1.0
Content-length: 229
Content-type: multipart/form-data; boundary=simpleboundary
Host: localhost:3000
User-Agent: ApacheBench/2.3
Accept: */*


---
LOG: header received:
HTTP/1.1 500 Internal Server Error 
Content-Type: text/html; charset=utf-8
Content-Length: 13265
X-Request-Id: 9ad57d19cd71886a1bb817d00fac651b
X-Runtime: 0.015504
Server: WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)
Date: Tue, 25 Sep 2012 13:54:29 GMT
Connection: close
预期的返回是raise params.inspect,让我看看数据是否到达另一端。如果我移除边界,我可以看到params中接收到的数据,但这不是我想要的。我想上传一个文件


有人给小费吗?我将非常感激。

我找到了答案,并决定与您分享

在与post文件进行了一些斗争之后,我决定创建一个php脚本,只输出$\u文件和$\u请求变量,以查看文件是否正确构建。事实上,apache完美地接收了文件,我可以看到文件数据和其他请求参数

对于Rails,同样的情况不会发生,在阅读了HTTP1.1多部分主题的文档之后,我意识到问题与post文件格式有关

构建此类文件时,需要详细构建它,这意味着在正确的位置包含所有特殊字符,如\r和\n。多部分现在与“\n”一起工作,它需要“dos”行结尾“\r\n”

因此正确的post文件如下所示(图\r\n用于说明,但应该在那里,您知道吗?):

当您打开此文件时,实际上会看到:

--boundary_hash
Content-Disposition: form-data; name="your_form_field";
Content-Type: text/plain

your form field data
--boundary_hash
Content-Disposition: form-data; name="another_field";
Content-Type: text/plain

another field data
--boundary_hash
Content-Disposition: form-data; name="filename"; filename="cf_login.png"
Content-Type: image/png

base64 file content
--boundary_hash--
我希望这对你有帮助


干杯。

我找到了答案,并决定与大家分享

在与post文件进行了一些斗争之后,我决定创建一个php脚本,只输出$\u文件和$\u请求变量,以查看文件是否正确构建。事实上,apache完美地接收了文件,我可以看到文件数据和其他请求参数

对于Rails,同样的情况不会发生,在阅读了HTTP1.1多部分主题的文档之后,我意识到问题与post文件格式有关

构建此类文件时,需要详细构建它,这意味着在正确的位置包含所有特殊字符,如\r和\n。多部分现在与“\n”一起工作,它需要“dos”行结尾“\r\n”

因此正确的post文件如下所示(图\r\n用于说明,但应该在那里,您知道吗?):

当您打开此文件时,实际上会看到:

--boundary_hash
Content-Disposition: form-data; name="your_form_field";
Content-Type: text/plain

your form field data
--boundary_hash
Content-Disposition: form-data; name="another_field";
Content-Type: text/plain

another field data
--boundary_hash
Content-Disposition: form-data; name="filename"; filename="cf_login.png"
Content-Type: image/png

base64 file content
--boundary_hash--
我希望这对你有帮助

干杯