Post JPEG 文件使用 fiddler 和其他 body 数据

Post JPEG file using fiddler with other body data

我正在尝试通过 Fiddler post 将 jpeg 文件传输到本地开发的 Web 服务。这已经足够简单了,但我还需要在文件旁边包含一些数据,并且不能完全确定 fiddler 想要的语法。如果我单击上传文件按钮并 select 一个要上传的文件,它会将我的 POST body 替换为:

---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="PantheraLeo.jpg"
Content-Type: image/jpeg

<@INCLUDE *C:\temp\PantheraLeo.jpg*@>
---------------------------acebdf13572468—

现在我想添加一些额外的数据:

user=1&album=2&photo=[OUTPUT FROM FILE UPLOAD]

我试过将它放在 body 的开头,但是当我的 Node 应用程序收到请求时,我得到了一个用户参数和一个相册参数,但没有照片。

关于如何格式化此请求以获取参数和作为照片参数上传的照片有什么想法吗?

我自己也一直想做类似的事情,偶然发现了你的问题。在对 Fiddler 进行了一番折腾之后,我刚刚设法实现了我所需要的。试试这个:

---------------------------acebdf13572468
Content-Disposition: form-data; name="model" 

MyModelInfo

---------------------------acebdf13572468
Content-Disposition: form-data; model="test123"; filename="123.gif"
Content-Type: image/gif

<@INCLUDE *Z:\Downloads3.gif*@>
---------------------------acebdf13572468--

您似乎 link 将请求正文中的表单数据发送到 POST 信息中的 'acebdf13572468' 边界。为 Content-Disposition 提供键名(在我的示例中为 'model'),然后下一行表示您为此键的实际值。 (在我的例子中 "MyModelInfo".

使用上面的请求正文,我能够 POST 上传一个文件以及一些随附的 POST 数据到我的 API。

接受的答案效果很好。但是在 MyModelInfo 进入字符串后要注意额外的行。此外,当在 fiddler 中复制和粘贴时,一些行已损坏,从而破坏了文件。

注意我在 fiddler 主体和接收 API 函数中将文件参数命名为 "file"。

这对我有用:

---------------------------acebdf13572468
Content-Disposition: form-data; name="PARAM1"

Some text with a line before but not after
---------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="filename.jpg"
Content-Type: image/jpeg

<@INCLUDE *C:\local\filename.jpg*@>
---------------------------acebdf13572468--

.net core 2 可以这样接收数据:

    [HttpPost]
    [Route("AddImage")]
    public async System.Threading.Tasks.Task<IActionResult> AddImageAsync(IFormFile file)
    {
        //f is the same as file
        //var f = Request.Form.Files.Count > 0 ? Request.Form.Files[0] : null;

        //useful to check the keys
        //var additionalProperties = Request.Form.Keys;

        if (file != null)
        {
            try
            {
                if (Request.Form.TryGetValue("PARAM1", out StringValues p1))
                {
                     var txt = p1.ToString():