Post 一个非空文件到 Dspace with Curl
Post a not empty file to Dspace with Curl
我正在通过 dspace api 将文件发布到 dspace,我正在 php 中执行此操作。通过邮递员,我发送了一个包含文件、文件名、比特流 ID 和令牌的表单数据。
我正在使用 $_FILES 获取临时文件路径并通过 postfields curl 选项发送它,但是文件上传是空的,或者包含奇怪的数据,没有内容。
public function actionSubirBitstream()
{
if (Yii::$app->request->isPost) {
$body = $_POST;
$prefijo = '/rest/items/';
$host = ConfiguracionDspace::find()->where("clave='host'")->one()->valor;
$puerto = ConfiguracionDspace::find()->where("clave='puerto'")->one()->valor;
$token = $body['token'];
$id = $body['id'];
$final = '/bitstreams';
$name = $body['name'];//nombre del archivo sin espacios
$params = "?name=$name";
$url = $host . ':' . $puerto . $prefijo . $id . $final . $params;
$file = $_FILES['file']['tmp_name'];
//$path = $body['path'];
//$file = new CURLFILE("$path");
$headers = array("Content-Type: application/json", 'Accept: application/json', "rest-dspace-token: " . $token);
$curl = curl_init($url);
$options = array(
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('file'=> $file,'name' => $name),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers
);
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
}
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('photo'=> new CURLFILE('/C:/Users/pfile3.jpeg'),'name' => $name),
这是上传一个文件的例子,表单键是照片,另一个键名是
在您的屏幕截图中,您在表单数据中有 id 和标记,但在代码中它不在 POSTFIELDS 中
在 postman 中你可以生成任何语言的请求等价代码,尝试生成 PHP 等价代码,看看它是否有效:
要执行此操作,只需在保存请求 url 后单击请求 link 下的代码
我已经通过 $_FILE 变量 post 文件,但我需要做的是使用 CURLFILE 创建一个新文件,并为其提供文件在服务器中的临时路径
$file = $_FILES['file']['tmp_name'];
这在 post 字段中
CURLOPT_POSTFIELDS => array('file'=> new CURLFile("$file"),'name' => $name),
感谢朋友的帮助
这里是代码:
public function actionSubirBitstream()
{
if (Yii::$app->request->isPost) {
$body = $_POST;
$prefijo = '/rest/items/';
$host = ConfiguracionDspace::find()->where("clave='host'")->one()->valor;
$puerto = ConfiguracionDspace::find()->where("clave='puerto'")->one()->valor;
$token = $body['token'];
$id = $body['id'];
$final = '/bitstreams';
$name = $body['name'];//nombre del archivo sin espacios
$params = "?name=$name";
$url = $host . ':' . $puerto . $prefijo . $id . $final . $params;
$file = $_FILES['file']['tmp_name'];
//$path = $body['path'];
//$file = new CURLFILE("$path");
$headers = array("Content-Type: application/json", 'Accept: application/json', "rest-dspace-token: " . $token);
$curl = curl_init($url);
$options = array(
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('file'=> new CURLFile("$file"),'name' => $name),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers
);
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
}
post 大小合适的文件(最终)
我用Postman发送的表单数据,不需要使用字段路径
我正在通过 dspace api 将文件发布到 dspace,我正在 php 中执行此操作。通过邮递员,我发送了一个包含文件、文件名、比特流 ID 和令牌的表单数据。
我正在使用 $_FILES 获取临时文件路径并通过 postfields curl 选项发送它,但是文件上传是空的,或者包含奇怪的数据,没有内容。
public function actionSubirBitstream()
{
if (Yii::$app->request->isPost) {
$body = $_POST;
$prefijo = '/rest/items/';
$host = ConfiguracionDspace::find()->where("clave='host'")->one()->valor;
$puerto = ConfiguracionDspace::find()->where("clave='puerto'")->one()->valor;
$token = $body['token'];
$id = $body['id'];
$final = '/bitstreams';
$name = $body['name'];//nombre del archivo sin espacios
$params = "?name=$name";
$url = $host . ':' . $puerto . $prefijo . $id . $final . $params;
$file = $_FILES['file']['tmp_name'];
//$path = $body['path'];
//$file = new CURLFILE("$path");
$headers = array("Content-Type: application/json", 'Accept: application/json', "rest-dspace-token: " . $token);
$curl = curl_init($url);
$options = array(
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('file'=> $file,'name' => $name),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers
);
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
}
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('photo'=> new CURLFILE('/C:/Users/pfile3.jpeg'),'name' => $name),
这是上传一个文件的例子,表单键是照片,另一个键名是
在您的屏幕截图中,您在表单数据中有 id 和标记,但在代码中它不在 POSTFIELDS 中
在 postman 中你可以生成任何语言的请求等价代码,尝试生成 PHP 等价代码,看看它是否有效:
要执行此操作,只需在保存请求 url 后单击请求 link 下的代码
我已经通过 $_FILE 变量 post 文件,但我需要做的是使用 CURLFILE 创建一个新文件,并为其提供文件在服务器中的临时路径
$file = $_FILES['file']['tmp_name'];
这在 post 字段中
CURLOPT_POSTFIELDS => array('file'=> new CURLFile("$file"),'name' => $name),
感谢朋友的帮助
这里是代码:
public function actionSubirBitstream()
{
if (Yii::$app->request->isPost) {
$body = $_POST;
$prefijo = '/rest/items/';
$host = ConfiguracionDspace::find()->where("clave='host'")->one()->valor;
$puerto = ConfiguracionDspace::find()->where("clave='puerto'")->one()->valor;
$token = $body['token'];
$id = $body['id'];
$final = '/bitstreams';
$name = $body['name'];//nombre del archivo sin espacios
$params = "?name=$name";
$url = $host . ':' . $puerto . $prefijo . $id . $final . $params;
$file = $_FILES['file']['tmp_name'];
//$path = $body['path'];
//$file = new CURLFILE("$path");
$headers = array("Content-Type: application/json", 'Accept: application/json', "rest-dspace-token: " . $token);
$curl = curl_init($url);
$options = array(
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('file'=> new CURLFile("$file"),'name' => $name),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers
);
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
}
post 大小合适的文件(最终)
我用Postman发送的表单数据,不需要使用字段路径