使用Octoprint API和GuzzleHttp上传文件
问题描述:
我想通过它的API将gcode文件上传到我的八段打印。 链接到其文档:http://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder使用Octoprint API和GuzzleHttp上传文件
Octoprint响应内部服务器错误。 在检查其日志文件,我发现下面几行表示octoprints上传功能的问题
File "/home/pi/oprint/local/lib/python2.7/site-packages/OctoPrint-1.3.4-py2.7.egg/octoprin$
added_file = fileManager.add_file(FileDestinations.LOCAL, futureFullPathInStorage, uploa$
File "/home/pi/oprint/local/lib/python2.7/site-packages/OctoPrint-1.3.4-py2.7.egg/octoprin$
self._analysis_queue.dequeue(queue_entry)
File "/home/pi/oprint/local/lib/python2.7/site-packages/OctoPrint-1.3.4-py2.7.egg/octoprin$
if not entry.type in self._queues:
AttributeError: 'NoneType' object has no attribute 'type'
我使用GuzzleHttp上传的文件,调用API网址/ API /文件/本地
public function printFile(Raspi $raspi,$file) {
$fileName = basename($file);
$result = $this->callAPIMethod($raspi, '/api/files/local', [
'multipart' => [
[
'name' => 'file',
'contents' => Storage::get($filePath),
'filename' => $fileName
],
[
'name' => 'print',
'contents' => true,
]
]
],"post");
$raspi->status = "druckt";
$raspi->save();
}
private function callAPIMethod(Raspi $raspi,$apiPath,$commandParams,$method='get') {
$client = new Client();
$apiKey = $raspi->key;
$params = [
'headers' => [
'X-API-Key' => $apiKey,
]
];
if($commandParams != NULL)
$params = array_merge ($params, $commandParams);
switch($method) {
case "get":
return $client->get($raspi->ip.":".RaspiApiController::$APIPORT."/".$apiPath, $params);
break;
case "post":
return $client->post($raspi->ip.":".RaspiApiController::$APIPORT.$apiPath, $params);
break;
case "delete":
return $client->delete($raspi->ip.":".RaspiApiController::$APIPORT."/".$apiPath, $params);
break;
default:
return $client->get($raspi->ip.":".RaspiApiController::$APIPORT."/".$apiPath, $params);
break;
}
}
如何我是否必须在Guzzle中更改我的请求以防止发生此错误?
答
问题原来是上传的文件没有正确的文件扩展名,并且在发送带有错误扩展名的文件时,octoprint api只是崩溃。
只要我的测试显示,只有.gcode文件可以被octoprint API正确上传。