在我的sinatra应用程序中,我使用以下curl
命令在路由/test
中发布文件。
curl -H "Content-Type: text/xml" -vv -X POST -d file_data=@test.xml
http://localhost:4567/test
在我的Sinatra post方法中,我想要读取文件,如
post '/test' do
data = params[:file_data] #Here file_data param name of CURL command.
end
但是,此处data
为NULL
。如何配置CURL命令以从file_data
param读取文件?
答案 0 :(得分:0)
curl -F file_data = @ / some / file / on / your / local / disk http://localhost:4567/test
来自cURL手册:
-F, --form <name=content>
(HTTP)这使curl模拟用户按下提交按钮的填写表单。这会根据RFC 2388使用Content-Type multipart / form-data导致curl POST数据。这样可以上传二进制文件等。要强制'content'部分为文件,请在文件名前加上@符号。要从文件中获取内容部分,请在文件名前加上符号&lt;前缀。 @和&lt;之间的区别然后,@使文件作为文件上传附加在帖子中,而&lt;创建一个文本字段,然后从文件中获取该文本字段的内容。
了解更多详情:cURL manual
答案 1 :(得分:0)
快速回答:删除-H "Content-Type: text/xml"
,它应该有效。
问题在于,当发送文件时,Content-Type
标题应为multipart/form-data
,curl
在您使用-F
时会自动设置-H
。来自curl
s documentation:
-F, - 表格 (HTTP)这使curl模拟用户按下提交的填写表单 按钮。这会根据RFC 2388使用Content-Type multipart / form-data导致curl POST数据。这样可以上传二进制文件等。
但是,您使用curl
覆盖此标头,因此您的应用期望某些内容不是文件。
如果除了使用curl -X POST -F "file_data=@test.xml;type=text/xml" http://localhost:4567/test
发送文件之外,您想要包含有关其类型的信息,您应该这样做:
multipart/form-data
(内容类型位于文件名和分号之后。)
要查看原始表单提交请求最终如何与w = 0;
for i = 1:k
for j = 1:N(i)
x_diff = x(i,j) - mean(x(i,:));
w = w + (x_diff * x_diff^T);
end
end
b = 0;
for i = 1:k
x_diff = mean(x(i,:)) - mean(x);
b = b + (N(i) * x_diff * x_diff^T);
end
一样,请查看this question的答案。