- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个演示 API,它接收文件和注释作为多部分/表单数据输入并显示文件和注释的内容。这是正确运行 API 的示例 HTML:
<html>
<body>
<FORM action="http://cgi-lib.berkeley.edu/ex/fup.cgi" method="post">
<P>Choose file: <INPUT type="file" name="upfile">
<p>Note: <INPUT type="text" name="note">
<p><INPUT type="submit" value="Send">
</FORM>
</body>
</html>
现在我正尝试在 WSO2 APIM 发布者中创建一个托管 API。下面是我填写的参数:
我正在替换 HTML 的操作以通过我添加的 API:
<FORM action="http://ec2-52-48-93-41.eu-west-1.compute.amazonaws.com:8280/test" method="post">
但是现在当我运行 HTML 时,我从 API 中收到以下错误:
cgi-lib.pl: Unknown Content-type: application/x-www-form-urlencoded; charset=UTF-8
似乎 WSO2 网关将请求转发为 application/x-www-form-urlencoded 而不是 mulipart/form-data。
基于以下讨论multipart form data file upload using WSO2 API manger ?我试着注释掉
<messageFormatter contentType="multipart/form-data"
class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
<messageBuilder contentType="multipart/form-data"
class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
并将它们替换为
<messageFormatter contentType="multipart/form-data"
class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>
<messageBuilder contentType="multipart/form-data"
class="org.wso2.carbon.relay.BinaryRelayBuilder"/>
然后重启了服务器,没有造成任何影响。
任何想法将不胜感激。
我收集的一些日志消息。目标 API 不同,但它也是一个 multipart/form-data API,可以转储它接收到的任何内容。
传入的请求确实有内容类型 multipart/form-data,内容长度为 292
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> POST /test/1.0.0 HTTP/1.1 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Host: ec2-52-48-93-41.eu-west-1.compute.amazonaws.com:8280 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Connection: keep-alive {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Content-Length: 292 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Cache-Control: max-age=0 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Origin: null {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Upgrade-Insecure-Requests: 1 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqwBdAwOnlDYeHNNR {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Accept-Encoding: gzip, deflate {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Accept-Language: en-US,en;q=0.8,he;q=0.6 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 >> Cookie: region3_registry_menu=visible; region1_manage_menu=visible; region1_identity_menu=visible; menuPanel=visible; menuPanelType=main; csrftoken=n1g69f3slt1d90qvtaa28rtm1b {org.apache.synapse.transport.http.headers}
传出请求没有内容类型:
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> POST /sample2/api/company/upload HTTP/1.1 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Cookie: region3_registry_menu=visible; region1_manage_menu=visible; region1_identity_menu=visible; menuPanel=visible; menuPanelType=main; csrftoken=n1g69f3slt1d90qvtaa28rtm1b {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Origin: null {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Cache-Control: max-age=0 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Upgrade-Insecure-Requests: 1 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Accept-Encoding: gzip, deflate {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Accept-Language: en-US,en;q=0.8,he;q=0.6 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Transfer-Encoding: chunked {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Host: localhost:8080 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> Connection: Keep-Alive {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 >> User-Agent: Synapse-PT-HttpComponents-NIO {org.apache.synapse.transport.http.headers}
自然地,传入响应具有 HTTP 415,不支持的媒体:
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 << HTTP/1.1 415 Unsupported Media Type {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 << Server: Apache-Coyote/1.1 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 << Content-Length: 0 {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-outgoing-1 << Date: Mon, 28 Mar 2016 13:53:05 GMT {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << HTTP/1.1 415 Unsupported Media Type {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Access-Control-Allow-Origin: * {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Access-Control-Allow-Methods: POST {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Access-Control-Allow-Headers: authorization,Access-Control-Allow-Origin,Content-Type {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Date: Mon, 28 Mar 2016 13:53:05 GMT {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Transfer-Encoding: chunked {org.apache.synapse.transport.http.headers}
DEBUG {org.apache.synapse.transport.http.headers} - http-incoming-1 << Connection: keep-alive {org.apache.synapse.transport.http.headers}
另外值得加载的是 API 的突触:
<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse"
name="admin--test"
context="/test/1.0.0"
version="1.0.0"
version-type="context">
<resource methods="POST" url-mapping="/*" faultSequence="fault">
<inSequence>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<property name="api.ut.backendRequestTime"
expression="get-property('SYSTEM_TIME')"/>
<send>
<endpoint name="admin--test_APIproductionEndpoint_0">
<http uri-template="http://localhost:8080/sample2/api/company/upload"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.throttling.APIThrottleHandler">
<property name="policyKey" value="gov:/apimgt/applicationdata/tiers.xml"/>
<property name="policyKeyApplication"
value="gov:/apimgt/applicationdata/app-tiers.xml"/>
<property name="policyKey" value="gov:/apimgt/applicationdata/tiers.xml"/>
<property name="policyKeyApplication"
value="gov:/apimgt/applicationdata/app-tiers.xml"/>
<property name="id" value="A"/>
<property name="policyKeyResource"
value="gov:/apimgt/applicationdata/res-tiers.xml"/>
</handler>
<handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageHandler"/>
<handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtGoogleAnalyticsTrackingHandler">
<property name="configKey" value="gov:/apimgt/statistics/ga-config.xml"/>
</handler>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler"/>
</handlers>
</api>
最佳答案
默认情况下,较新的 API 管理器似乎不保留来自客户端的某些 header 。您需要在 repository/conf/passthru-http.properties 中添加以下属性 http.headers.preserve = Content-Type 以保留内容类型 header 。
关于multipartform-data - wso2 am 网关转发 multipart/form-data post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258858/
我正在使用 jboss 的 rest-easy 多部分提供程序来导入文件。我在这里阅读http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/ht
如何使用无服务器框架处理多部分/表单数据? v.0.5.6 刚试过这个: "requestTemplates": { "multipart/form-data": {
我正在学习Spray,使用spray-can和spray-httpx(没有spray-routing)来接受上传的文件。我提出了以下建议: def receive = { ...
我正在使用 Apache HTTPClient 4。我正在做像这样的非常普通的多部分内容: val entity = new MultipartEntity(HttpMultipartMode.BRO
这是一个 RFC 2046使用“边界”边界的多部分八位字节流。 --boundary Content-Type: text/plain; charset="US-ASCII" abc --bounda
我正在尝试构建一个 Excel 文件 uploader 并解析路由中的数据来存储它,但似乎数据在通过 $http 服务路由发送的 FormData 的转换过程中丢失了。我不知道该怎么办!如果您有这方面
此代码是用于处理上传的 RestEasy 代码: @Path("/fileupload") public class UploadService { @POST @Path("/upl
我面临一个问题,我无法在资源中获取表单,变量始终为空 我的资源: @POST @Path("/upload-logo") @Consumes(MediaType.MULTIPA
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我无法在任何地方找到我的问题的答案,所以我想我已经问过了。 我正在使用 Alamofire 3.1.5 上传相当大的图片,我们说的是数百 MB。 有一段代码: self.manager.upl
我正在尝试在 NodeRed 中生成一个 HTTP Webrequest,它将通过正常的上传表单将文件上传到网站。我想我知道如何上传文件,但我不知道如何传递我还必须填写的其他输入字段。 我只找到了如何
我正在将代码从 NodeJS 移植到 python3。我想发布图像二进制数据和文本。我该怎么做 ?谢谢。 NodeJS filePath = "xxx.jpeg" text = "xxx" retur
我有一个可重复的表单域: 这将(使用 jQuery)例如导致 根据用户要上传的文件数量。表单方法是post,enctype是m
我一直在尝试使用@MultipartForm 测试发送byte[] 和InputStream 对象,但是我得到了这两种类型的空对象,有什么想法吗?我正在使用 RestEasy 2.3.5.Final
我想问一个关于多部分/表单数据的问题。我找到了多部分帖子的 http header 和 Content-Type: multipart/form-data;边界=-------边界编号。我想问,bou
我正在使用一个演示 API,它接收文件和注释作为多部分/表单数据输入并显示文件和注释的内容。这是正确运行 API 的示例 HTML: Choose file:
我正在尝试将一个或多个文件 (.doc) 发送到 ASP.NET Web API 2 服务并返回修改后的版本 (.docx)。我能够发送文件并获得响应,但是我在请求中 HTTPContent 的服务中
我正在从 echo.Context 解析一个多部分表单。我使用 form.Value 检索 slice ([]string) 的值。这将返回一个带有双括号的值。 (例如 [["this","somet
任何人都可以解释我如何使用不同类型的数据向 Web 上的 URL 发出 POST 请求,在我的例子中,我有一个图像和两个字符串类型值要发送到 PHP 中的服务器。 这是我已经做过的 var strea
我正在使用 Aurelia Fetch Client 向 Web API 端点发送文件上传请求。但是 IFormFile 是空的所有磁贴。我的代码如下。 客户端 const formData = ne
我是一名优秀的程序员,十分优秀!