POST请求responseType“数组缓冲区”是不是可行?
Posted
技术标签:
【中文标题】POST请求responseType“数组缓冲区”是不是可行?【英文标题】:Is it posible to POST request the responseType "array buffer"?POST请求responseType“数组缓冲区”是否可行? 【发布时间】:2021-08-25 02:00:30 【问题描述】:我制作了一个将返回图像的 api。起初我在 get 方法请求上尝试过它并且它可以工作,但出于安全原因,我需要让它发布方法,但 post 不像我的 get 方法那样工作。您是否认为 responseType 仅在 get 方法中可用,因为它不适用于我的 post 方法?
这是我使用 get 方法的代码:
前端:
export const getImageFile = async (imageName) =>
try
const data = await axios.get(`$apiUrl/image/$imageName`,
responseType: "arraybuffer",
);
const image = new Buffer.from(data, "binary").toString("base64");
return `data:image/png;base64, $image`;
catch (err)
alert("File not found.");
;
后端(php symfony):
/**
* @Route("/api/graph/image/imageName", methods="GET", name="get- image-graph")
*/
public function getImage($imageName)
try
$file = $this->parameterBag->get('kernel.project_dir').'/public/graphImage/graphs/'.$imageName;
$response = new BinaryFileResponse($file);
return $response;
catch (\Exception $e)
return $this->json(['error' => 'File not found'], JsonResponse::HTTP_NOT_FOUND);
当我使用不起作用的 POST 方法时,这是我的代码:
前端:
export const getImageFile = async (imageName) =>
try
const data = await axios.post(`$apiUrl/image`,
responseType: "arraybuffer",
"imageName": imageName,
);
const image = new Buffer.from(data, "binary").toString("base64");
return `data:image/png;base64, $image`;
catch (err)
alert("File not found.");
;`
backend:
```php
/**
* @Route("/api/graph/image", methods="POST", name="get-image-
graph")
*/
public function getImage(Request $request)
try
$content = json_decode($request->getContent(), true);
$imageName = $content["imageName"];
$file = $this->parameterBag->get('kernel.project_dir')
.'/public/graphImage/graphs/'.$imageName;
$response = new BinaryFileResponse($file);
return $response;
catch (\Exception $e)
return $this->json(['error' => 'File not found'],
JsonResponse::HTTP_NOT_FOUND);
`
【问题讨论】:
对于 post 方法使用$image = $_POST["imageName"]
因为你不是将它作为 json 发送
我根据我的前端请求将其作为 json 发送。我根据 devtool(成功请求)获取图像,但它没有出现在我的前端。当我在帖子上尝试时,我认为我的 responseType 不起作用。
headers: "Content-Type": "application/json"
不在您的发帖请求中。所以试试 $image = $_POST["imageName"]
我试过但它会导致错误。
试试我的答案,让我知道
【参考方案1】:
来自Documentation,
axios.post(url, data, config)
您的发帖请求:
const data = await axios.post(`$apiUrl/image`,
responseType: "arraybuffer",
"imageName": imageName,
);
您似乎混合了数据和配置。所以你的帖子请求应该是
const data = await axios.post(
`$apiUrl/image`,
"imageName": imageName,
,
responseType: "arraybuffer"
);
// In server side php,you access it like
$image = $_POST["imageName"];
如果您想以 json 格式发送,请在配置中使用标头
responseType: "arraybuffer",
headers: 'Content-Type': 'application/json'
【讨论】:
嗨 Indra,我只是混合了数据和配置,在我分离之后,它就像魔术一样工作。感谢您的帮助 非常感谢 :) 作为初学者,我从您那里学到了很多东西。以上是关于POST请求responseType“数组缓冲区”是不是可行?的主要内容,如果未能解决你的问题,请参考以下文章
详解get与post请求方式content-type与responseType@Requestbody与@Requestparam的使用场景