无法在React with PHP中使用axios上传图像

brvekthn  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(137)

我在Reactjs和PHP工作,实际上我正在尝试上传图像到服务器,图像正在上传,但每当我试图打开图像,然后显示“我们不支持此文件格式”,我该如何解决这个问题?
1.我正在发送多部分表单数据的formdata,并且在php(API)中我正在使用base64图像上传图像到服务器
1.我发送图片到axios(API)的方法是正确的还是php代码有问题
下面是我的nextjs代码

const handleSubmit: FormEventHandler<HTMLFormElement> = async (e) => {
        var imagefile = document.querySelector('#file');
              formData.append("file", imagefile.files[0]);
              const response = await axios({
              method: "post",
              url: "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/",
              data: formData,
              headers: { "Content-Type": "multipart/form-data" },
              }).then(function (response) {
                alert('respone is '+ response.data.msg);
                 }).catch(function (error) {
               alert('respone is '+ error);
                console.log("failed to get recommend playlist");
                console.log('error is '+ error.msg);
            });
 }

下面是我在Php端的API代码

$data = json_decode(file_get_contents("php://input"), TRUE);
  $files=file_get_contents($_FILES["file"]["tmp_name"]); 
  $image = base64_decode(explode( ',', $files)[1]);
  define('UPLOAD_DIR', 'uploads/');
 $file_ext = strtolower( end(explode('.',$file_name)));
  $image_parts = explode(";base64,", $image);
  $image_type_aux = explode("image/", $image_parts[0]);
  $image_type = $image_type_aux[1];
  $image_base64 = base64_decode($image_parts[1]);
  $file = UPLOAD_DIR . uniqid() . '.'.$file_ext;
  file_put_contents($file, $image_base64);
5uzkadbs

5uzkadbs1#

问题出在PHP上,你可以用pathinfo()来获取扩展名,用move_uploaded_file()把上传的文件移到服务器上。
试试这个

define('UPLOAD_DIR', 'uploads/');
$file_ext  = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
$file_name = UPLOAD_DIR . uniqid() . time() . '.' . $file_ext;
move_uploaded_file($_FILES["file"]["tmp_name"], $file_name);

相关问题