如何使用Nextjs上传文件(图像)

ogsagwnx  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(304)

我正在努力:
1.上传图片到Next.js应用
1.在cjwbw/real-esrgan:d0ee3d708c9b911f122a4ad90046c5d26a0293b99476d697f6bb7f2e251ce2d4中运行它
1.然后返回增强图像
有人知道怎么做吗?

pobjuy32

pobjuy321#

从我所能理解的,你试图使用复制模型的高分辨率图像。
要实现您提到的步骤,您需要在Next.js应用程序中设置一个服务器,以使用Docker处理图像处理,或者如果您想使用Node.js,请尝试执行这些docs
我们将首先从Next js应用程序上传图像,然后在Next.js应用程序中使用Node.js设置后端服务器。此服务器将使用Docker镜像处理镜像。
然后我们将使用cjwbw/real-esrgan Docker镜像来处理上传的镜像并增强它。

**第一步:**设置下一个js应用,处理图片上传。

// pages/index.js

import React, { useState } from 'react';
import axios from 'axios';

const ImageUploader = () => {
  const [selectedImage, setSelectedImage] = useState(null);

  const handleImageUpload = async (event) => {
    const file = event.target.files[0];
    const formData = new FormData();
    formData.append('image', file);

    try {
      const response = await axios.post('/api/enhance-image', formData);
      // Handle the enhanced image response here
      console.log('Enhanced image:', response.data);
      // Update state or display the enhanced image
    } catch (error) {
      console.error('Error enhancing image:', error);
    }
  };

  return (
    <div>
      <input type="file" accept="image/*" onChange={handleImageUpload} />
    </div>
  );
};

export default ImageUploader;
  • 第二步:处理图片并作为响应返回
// pages/api/enhance-image.js

import { execSync } from 'child_process';

export default async (req, res) => {
  const imagePath = req.body.image.path; // Assuming the image is uploaded to a temporary directory
  const enhancedImagePath = 'path/to/save/enhanced-image.jpg'; // Provide a path to save the enhanced image

  // Run the image enhancement using Docker
  execSync(
    `docker run -v ${imagePath}:/input -v ${enhancedImagePath}:/output cjwbw/real-esrgan:d0ee3d708c9b911f122a4ad90046c5d26a0293b99476d697f6bb7f2e251ce2d4`
  );

  // Return the path to the enhanced image
  res.status(200).json({ enhancedImagePath });
};

希望这对你有帮助:)

ac1kyiln

ac1kyiln2#

使用文件输入并将输出值发送到esrgan API,然后从API响应中检索增强的映像

<input
  type="file"
  id="input"
  accept="image/*" />

使用输入选择图像,现在您可以发送所选图像

const selectedImage = document.getElementById("input").files[0]

或者,您可以使用ref而不是id,方法是使用useRef react钩子并将ref分配给输入,然后从输入ref获取文件

const inputRef = useRef(null)
<input
  type="file"
  ref={inputRef}
  accept="image/*" />
const selectedImage = inputRef.current.files[0]

.将选定的图像发送到API

相关问题