从文件名中获取文件名和扩展名没有文件名
我正在查看下载文件,稍后再次将其上传到API以检查文件是否是恶意文件。从文件名中获取文件名和扩展名没有文件名
起初很容易,如果文件名+扩展名在URL中,但看到情况并非总是如此,我不知道提供给我的确切文件名和扩展名,所以当试图保存它时到一个临时文件,我将无法为其分配文件扩展名。
是否有可能以某种方式获取该文件名?或者至少是扩展名,所以我可以将其添加到我的临时文件再上传之前..
这是我目前有(我知道,我目前只是使用tmpfilename,但这将改变一次我知道如何检查的文件扩展名):
public function download($url, $tmpfilename, $method)
{
$client = new Client([
// Base URI is used with relative requests
'base_uri' => $url,
'sink' => $tmpfilename,
]);
try {
$response = $client->request($method);
if (is_bool($response)) {
return $response;
} else {
return $response->getBody()->getContents();
}
} catch (\GuzzleHttp\Exception\ClientException $e) {
return false;
} catch (\GuzzleHttp\Exception\RequestException $e) {
return false;
}
}
你可以猜到使用Content-Type
响应头的文件扩展名。
例如,ralouphie/mimey做转换:
$extension = $mimes->getExtension($response->getHeaderLine('Content-Type'));
如果我使用上面的代码,你会如何在运行请求之前添加扩展?因为它会返回'$ response-> getBody() - > getContents()'。我试图让它下载一个txt文件,所以$ file = guzzlerequestabove,然后是'mime_content_type($ file)',但只返回'application/octet-stream'。 – Marius
您需要原创的回复,因为只有它包含原始的“Content-Type”。 –
顺便说一句,如果你使用'sink',你可能不需要'$ response-> getBody() - > getContents()',因为内容已经写入文件。 –
文件扩展名可以很容易地改变,并且没有对文件内容进行匹配。 – Reeno
没问题,这个问题实际上与此无关。我只是想知道如何从一个不包含文件名的URL中访问正在下载的文件和文件名。 – Marius