curl post 图像到 sinatra api 失败

curl post image to sinatra api fail

我知道这是一个在 Whosebug 上提出和回答的问题,但我尝试了很多都没有帮助,不知道如何调试它。

我的命令:

curl -i -X POST -H “Content-Type: multipart/form-data” -F "file=/Users/william/Desktop/test.png" http://localhost:3000/api/v1/books

终端输出:

    curl: (6) Could not resolve host: multipart
HTTP/1.1 500 Internal Server Error 
Content-Type: text/html
Content-Length: 170873
Server: WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
Date: Thu, 14 Jan 2016 11:19:40 GMT
Connection: Keep-Alive

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="robots" content="NONE,NOARCHIVE" />
  <title>NameError at &#x2F;api&#x2F;v1&#x2F;books</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }

不确定如何解决这个问题?我用浏览器测试效果很好:

<form action='/api/v1/books' enctype="multipart/form-data" method='POST'>
    <input name="file" type="file" />
    <input type="submit" value="Upload" />
</form> 

有什么帮助吗?谢谢!

EDIT 在路径前添加@ 使上传图片成功,但仍然出现输出错误。 这是一行:<title>NameError at &#x2F;api&#x2F;v1&#x2F;books</title> 应该是什么可能的错误?

"curl: (6) Could not resolve host: multipart" 表示 curl 将 "multipart" 视为 URL。我怀疑它这样做是因为您没有在该命令行中使用 "real" 双引号(ascii 代码 34),而是使用一些特殊的 unicode 引号。

file= 之前的双引号看起来不一样 - 而且是正确的。

(正如@mhawke 提到的那样,设置 Content-Type 完全没有必要,因为 curl 在使用 -F 时默认情况下已经这样做了)