You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native上传图片至Laravel API报403错误,Postman可正常运行

Laravel后端图片上传:React Native请求返回403 Forbidden问题

我正在开发一个Laravel后端用于存储费用记录,包含图片上传功能。该后端通过Postman测试完全正常,但从React Native应用上传图片时,会出现403 Forbidden错误。

后端代码

public function store(Request $request)
{
    try {
        $store_expence = new AddExpence;
        $store_expence->total_milage = $request->meter;
        $store_expence->amount = $request->amount;
        $store_expence->asset_id = $request->asset_id;
        $store_expence->type_id = $request->type_id;
        $store_expence->pump_station = $request->pump_station;
        $store_expence->user_id = Auth::guard('api')->user()->id;

        if($request->file('file')) {
            $image = $request->file('file');
            $imageName = time() . '.' . $image->getClientOriginalExtension();

            // Resize the image
            $image_resize = Image::make($image->getRealPath());
            $image_resize->resize(1000, 1000);

            // Save the image
            $path = 'uploads/' . $imageName;
            $image_resize->save(public_path($path));
            
            // Store path in database
            $store_expence->image = $path;
        }
        
        if ($store_expence->save()) {
            return response()->json(['result' => 'Data is stored successfully'], 200);
        } else {
            return response()->json(['message' => 'There is an error in uploading'], 400);
        }
    } catch (\Exception $e) {
        \Log::error('Image upload failed:', ['error' => $e->getMessage()]);
        return response()->json(['message' => 'Image upload failed: ' . $e->getMessage()], 400);
    }
}

React Native代码

const handleSave = async () => {
    try {
      setLoading(true);
      const token = await AsyncStorage.getItem("token");
  
      if (!pumpStation || !amount || type === "Type" || asset === "Asset") {
        alert("Please fill in all required fields.");
        setLoading(false);
        return;
      }
  
      const formData = new FormData();
      formData.append("meter", totalMilage);
      formData.append("pump_station", pumpStation);
      formData.append("amount", amount);
      formData.append(
        "type_id",
        data.type.find((item) => item.title === type)?.id || ""
      );
      formData.append(
        "asset_id",
        Object.keys(data.assets).find((key) => data.assets[key] === asset) || ""
      );
  
      if (image) {
        let localUri = image.startsWith("file://") ? image : `file://${image}`;
        let filename = localUri.split("/").pop();
        let match = /\.(\w+)$/.exec(filename);
        let type = match ? `image/${match[1]}` : "image/jpeg"; 
  
        formData.append("file", {
          uri: localUri, 
          name: filename,
          type: type,
        });
  
        console.log("Image being sent:", { uri: localUri, name: filename, type });
      }
  
      console.log("Full form data:", [...formData.entries()]);
  
      const response = await fetch(`${BASE_URL}/api/v1/expenses/storeExpenses`, {
        method: "POST",
        headers: {
          Authorization: `Bearer ${token}`,
          Accept: "application/json",
          "Content-Type": "multipart/form-data",
        },
        body: formData,
      });
  
      const textResponse = await response.text();
      console.log("Server response:", textResponse);
  
      if (response.ok) {
        showAlert("Success", "Expense saved successfully", true);
      } else {
        showAlert("Error", textResponse);
      }
    } catch (error) {
      console.error("Error saving expense:", error);
      showAlert("Error", error.message);
    } finally {
      setLoading(false);
    }
  };

问题现象

API在Postman中测试运行正常,但从React Native应用发起相同请求时,会返回403 Forbidden错误。

已尝试的解决措施

  • 确保请求头中已正确发送API token;
  • 确认React Native应用有权限访问图片,且FormData已正确构造;
  • 对比React Native与Postman请求的Authorization头,二者完全一致。

恳请各位提供解决思路或相关见解!

内容的提问来源于stack exchange,提问作者BIlal Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:44:52