无法使用 JWT 将文件上传到盒子 - curl: (26) 创建表单数据失败
unable to upload file to box using JWT - curl: (26) failed creating formpost data
我正在 java 中使用 cURL 执行以下命令。这给了我错误 - 在 Bearer
.
之后的白色 space 之后
2019-07-25 08:04:09,297 INFO [com.pc.boxapi.BoxApi:198] - curl: (6) Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"'
curlCommand = "curl https://upload.box.com/api/2.0/files/content -H \"Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk\" -X POST -F attributes='{\"name\":\"text.txt\",\"parent\":{\"id\":\"69430965158\"}}' -F file=@file.txt\"";
Process process = Runtime.getRuntime().exec(curlCommand);
LOG.info("process {} ", process.getOutputStream().toString());
如果我在 Bearer
和 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
之间使用正斜杠
我收到另一个错误 -
INFO [com.pc.boxapi.BoxApi:198] - curl: (26) failed creating formpost data
服务器是 Linux
curl
的man
页面说错误代码26代表Read error. Various reading problems.
。
如果你只是打印你试图执行的命令,你会得到这个:
curl https://upload.box.com/api/2.0/files/content -H "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk" -X POST -F attributes='{"name":"text.txt","parent":{"id":"69430965158"}}' -F file=@file.txt"
读取问题可能与 -F file=@file.txt"
有关。请注意文件名末尾的额外 "
。我很确定你的问题就在这里。删除它并确保 file.txt
存在。
顺便说一句,如果你需要在 Java 中发出 HTTP 请求,你应该使用像 Apache HttpClient.
这样的库
不惜一切代价避免执行系统命令,这是一个等待追加的安全问题!
根据错误消息 Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"'
,curl 将 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
解析为主机名,这意味着当您显然需要时,它会收到 Authorization:Bearer
和 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
作为两个单独的参数它作为一个单独的。
我建议使用 Process.runtime(String[] cmdarray)
方法而不是 Process.runtime(String cmd)
,在这种方法中,您将负责将命令拆分为多个标记:
String[] curlCommand = { "curl", "https://upload.box.com/api/2.0/files/content",
"-H", "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk", "-X", "POST",
"-F", "attributes={\"name\":\"text.txt\",\"parent\":{\"id\":\"69430965158\"}}",
"-F", "file=@file.txt"
};
Process.runtime(curlCommand);
另请注意,@file.txt
引用是一个相对引用:它依赖于当前工作目录中 file.txt
文件的存在(除非更改,否则您执行 java 代码来自).
我正在 java 中使用 cURL 执行以下命令。这给了我错误 - 在 Bearer
.
2019-07-25 08:04:09,297 INFO [com.pc.boxapi.BoxApi:198] - curl: (6) Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"'
curlCommand = "curl https://upload.box.com/api/2.0/files/content -H \"Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk\" -X POST -F attributes='{\"name\":\"text.txt\",\"parent\":{\"id\":\"69430965158\"}}' -F file=@file.txt\"";
Process process = Runtime.getRuntime().exec(curlCommand);
LOG.info("process {} ", process.getOutputStream().toString());
如果我在 Bearer
和 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
之间使用正斜杠
我收到另一个错误 -
INFO [com.pc.boxapi.BoxApi:198] - curl: (26) failed creating formpost data
服务器是 Linux
curl
的man
页面说错误代码26代表Read error. Various reading problems.
。
如果你只是打印你试图执行的命令,你会得到这个:
curl https://upload.box.com/api/2.0/files/content -H "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk" -X POST -F attributes='{"name":"text.txt","parent":{"id":"69430965158"}}' -F file=@file.txt"
读取问题可能与 -F file=@file.txt"
有关。请注意文件名末尾的额外 "
。我很确定你的问题就在这里。删除它并确保 file.txt
存在。
顺便说一句,如果你需要在 Java 中发出 HTTP 请求,你应该使用像 Apache HttpClient.
这样的库不惜一切代价避免执行系统命令,这是一个等待追加的安全问题!
根据错误消息 Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"'
,curl 将 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
解析为主机名,这意味着当您显然需要时,它会收到 Authorization:Bearer
和 Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk
作为两个单独的参数它作为一个单独的。
我建议使用 Process.runtime(String[] cmdarray)
方法而不是 Process.runtime(String cmd)
,在这种方法中,您将负责将命令拆分为多个标记:
String[] curlCommand = { "curl", "https://upload.box.com/api/2.0/files/content",
"-H", "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk", "-X", "POST",
"-F", "attributes={\"name\":\"text.txt\",\"parent\":{\"id\":\"69430965158\"}}",
"-F", "file=@file.txt"
};
Process.runtime(curlCommand);
另请注意,@file.txt
引用是一个相对引用:它依赖于当前工作目录中 file.txt
文件的存在(除非更改,否则您执行 java 代码来自).