AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76985726
Accepted
Rishabh Kumar
Rishabh Kumar
Asked: 2023-08-27 12:31:02 +0800 CST2023-08-27 12:31:02 +0800 CST 2023-08-27 12:31:02 +0800 CST

在 Next.js 13 中将图像上传到服务器会导致 ENOENT 错误

  • 772

我正在使用 Next.js 13 开发一个项目,在尝试将图像上传到服务器时遇到问题。我收到的错误消息是:

- error Error: ENOENT: no such file or directory, open 'temp/img.jpeg'

这是我的应用程序的客户端代码:

"use client";
import axios from "axios";
import { useState } from "react";

export default function Home() {
  const [file, setFile] = useState();
  const [name, setname] = useState("rishabh");
  const submit = async (e) => {
    e.preventDefault();
    const formdata = new FormData();
    formdata.set("file", file);
    const res = await axios.post("/api/post", formdata);
    console.log(res);
  };

  function sendfile(e) {
    console.log(e.target.files[0]);
    setFile(e.target.files[0]);
    console.log(file);
  }
  
  return (
    <div>
      <form onSubmit={submit}>
        <label>upload files</label>
        <input
          name="file"
          onChange={(e) => setFile(e.target.files[0])}
          type="file"
        ></input>
        <button type="submit">Submit</button>
      </form>
    </div>
  );
}

在此输入图像描述

这是我的应用程序的服务器端代码:

import { writeFile, writeFileSync } from "fs";
import { NextRequest,NextResponse } from "next/server";
import {join} from 'path';
export async function POST(NextRequest)
{
    const data = await NextRequest.formData();
    const file = data.get('file');
    const bytes = await file.arrayBuffer()
    const buffer = Buffer.from(bytes)
    const path = join('./','temp',file.name)
    console.log('====================================');
    console.log(file.name,buffer);
    console.log('====================================');
    writeFileSync(path,buffer);
    
    return NextResponse.json({message:"get"})
}

在此输入图像描述

next.js
  • 1 1 个回答
  • 19 Views

1 个回答

  • Voted
  1. Best Answer
    Nazrul Chowdhury
    2023-08-27T17:30:34+08:002023-08-27T17:30:34+08:00

    在服务器端代码中,您正在使用 join 函数构建文件路径来保存上传的图像。join 函数期望其参数是将路径段连接起来形成新路径。但是,您提供 ./ 作为路径段,它引用当前目录,然后向其附加“temp”和 file.name。这会产生一个以 ./ 开头的串联路径,使其成为当前工作目录的相对路径。
    您可以使用 process.cwd() 提供绝对路径,以确保文件路径的构造一致并且不受工作目录中更改的影响。尝试这样的事情,

    const fileName = file.name
    const path = join(process.cwd(), 'temp', fileName) // Construct absolute path
    

    如果您仍然遇到问题,那么您需要确保临时文件夹存在,然后再尝试将文件保存到其中。如果目录不存在,可以使用 fs 模块创建该目录,

    // Ensure that the 'temp' directory exists
    try {
      mkdirSync(join(process.cwd(), 'temp'), { recursive: true })
    } catch (error) {
       console.error("Error creating 'temp' directory:", error)
       return NextResponse.json({ error: "An error occurred while creating the directory." }, { status: 500 })
    }
    
    • 1

相关问题

  • 如何禁用缓存数据并在每次客户端访问 Next.js 中的页面时更新

  • ReferenceError:Next.js 中未定义文档

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve