【问题标题】:Wiremock : how to upload file to folder __files with APIWiremock:如何使用 API 将文件上传到文件夹 __files
【发布时间】:2017-09-20 07:56:22
【问题描述】:

wiremock 的文档说我们可以模拟一个检索文件的请求,这要归功于这段代码:

{ "request": { "method": "GET", "url": "/body-file" }, "response": { "status": 200, "bodyFileName": "path/to/myfile.xml" } }

但现在我必须找到一种方法来重新上传文件,否则我的请求会出现 500 错误。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
    <title>Error 500 </title>
</head>
<body>
    <h2>HTTP ERROR: 500</h2>
    <p>Problem accessing /body-file. Reason:

        <pre>    java.lang.RuntimeException: java.io.FileNotFoundException: /wiremock-standalone/./__files/path/to/myfile.xml (No such file or directory)</pre>
    </p>
    <hr />
    <i>
        <small>Powered by Jetty://</small>
    </i>
</body>

精度:由于我们的基础设施限制,我无法直接上传文件。

【问题讨论】:

    标签: wiremock


    【解决方案1】:

    最近的 Wiremock 版本具有管理存根文件的端点(请参阅 https://github.com/tomakehurst/wiremock/blob/2.19.0/src/main/java/com/github/tomakehurst/wiremock/admin/AdminRoutes.java#L77

    您可以将带有PUT 的文件上传到/__admin/files/{filename}。有${pwd}/__files下存储。

    【讨论】:

    • 是否也有删除这些文件的api?
    • 似乎 DELETE 动词是为相同的 URL 模式实现的:github.com/tomakehurst/wiremock/blob/2.19.0/src/main/java/com/…
    • 可以更改文件存储路径吗?而不是这个 ${pwd}/__files 想成为 ${pwd}/__files/somepath
    • @Minisha 根据您运行 Wiremock 的方式,您可以通过设置根目录来更改 ${pwd}。例如,您可以在独立模式下使用--root-dir (wiremock.org/docs/running-standalone)
    • 希望 pwd 保持不变......但是寻找将文件放置在嵌套目录结构中的解决方案,例如 /__files/path1/a.jpg。 /__files/path2/path3/b.PDF /__files/path4/c.jpg 等
    【解决方案2】:

    一种解决方法是使用"body" 参数,如下所示:

    {
        {
        "request": {
            "method": "GET",
            "url": "/body-file"
        },
        "response": {
            "status": 200,
            "body": "<example><node Id='1' Action='Insert' /></example>"
        }
    }
    

    (请注意 '1'"1" 中的单引号 - 您需要使用 \"1\" 转义这些单引号。

    参见http://wiremock.org/docs/stubbing - 指定响应正文部分。

    如果您需要 JSON 负载,使用 "jsonBody" 参数会更好:

    {
        {
        "request": {
            "method": "GET",
            "url": "/body-file"
        },
        "response": {
            "status": 200,
            "jsonBody": 
                { 
                  "field1": "value1", 
                  "field2" : "value2" 
                }
        }
    }
    

    另一个不错的功能是,引用:

    已创建的存根映射可以通过在 Java 中调用 WireMock.saveAllMappings 或向 http://&lt;host&gt;:&lt;port&gt;/__admin/mappings/save 发送带有空正文的请求来持久化到映射目录。

    【讨论】:

    • 这不能回答问题,因为我必须传递一个文件。您的建议只是常规用法...
    • @kenji_getpowered 没错,这只是一种解决方法。如果您有文件,您可以将内容上传到服务器并保存。它不是很优雅(尤其是对于大文件),但在某些情况下可能有用。
    • 精度:由于我们的基础设施限制,我无法直接上传文件。这句话在我的问题中。谢谢你,但你的回答根本不相关。
    • 是的,我看到了,而且这种方法是一种解决方法 - 您可以发送 POST 消息并将正文有效负载保存在本地文件系统上(在上述服务器上),而不是直接上传。抱歉,如果您无法使用,我希望其他人仍然可以发现它有用:)
    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2013-05-30
    • 2021-10-14
    • 1970-01-01
    • 2020-04-26
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多