我正在尝试通过Fiddler将jpeg文件发布到本地开发的Web服务。这很简单,但我还需要在文件旁边包含一些数据,并且不能完全指出fiddler想要的语法。如果我单击上传文件按钮并选择要上载的文件,它将用以下内容替换我的POST主体:
---------------------------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]
我已经尝试将它放在正文的开头,但是当我的Node应用收到请求时,我会收到一个用户参数,一个专辑参数但没有照片。
有关如何格式化此请求以获取参数和照片作为照片参数上传的任何想法?
答案 0 :(得分:4)
我自己一直在寻找类似的事情,偶然发现了你的问题。在与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:\Downloads\123.gif*@>
---------------------------acebdf13572468--
您似乎将在请求正文中发送的表单数据链接到&#39; acebdf13572468&#39; POST信息中的边界。使用密钥名称(在我的情况下&#39; model&#39;)中提供Content-Disposition,然后以下行代表此密钥的实际值。 (在我的情况下&#34; MyModelInfo&#34;。
使用上面的请求正文,我能够将一个文件以及一些附带的POST数据发布到我的API。
答案 1 :(得分:0)
可接受的答案效果很好。但是要警告MyModelInfo进入字符串后的多余行。同样,在复制和粘贴提琴小提琴时,某些行损坏了文件。
请注意,我在提琴手主体和接收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():