【问题标题】:How to upload and get image / formData with react native axios and multer如何使用 react native axios 和 multer 上传和获取图像/formData
【发布时间】:2020-11-29 23:38:31
【问题描述】:

我尝试将图像发布到 MongoDB,但得到状态 CODE 404,

  • 我有 multer 和静态路径“/uploads/”,这个目录在前端有一些图像,我从服务器获取数组,但我不知道如何显示它们:

  • 我尝试在平面列表中显示它们:

    //这里是它的工作。 当我替换为 {require("../../server/${item.imageurl}" 我得到错误

  • 当我控制台记录需要路径时,我会使用 url->> ../../server/uploads\a1.jpg 获取对象

  • 看到 / 是对面的 \ ,也许是它的问题?


现在我尝试上传:

  1. 当我选择文件时我得到了对象(selectedImage):

     "localUri": "file:/data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252FLior- 
     3698f362-fc81-4a77-8c97-8cd1349ce090/ImagePicker/d4c4b4ec-72e6-4e20-b6eb-4727bc84d93e.jpg",
    

还有我的 axios 帖子:

        if (selectedImage !== null) {
        let formData = new FormData();
        formData.append("image", selectedImage);
        console.log(formData);
        try {
            const response = await indexApi.post(`/uploads`, formData);
            console.log("res", response);
        } catch (err) {
            console.log("c", err);
        }
    }
};

the form data that i send look like:
    FormData {
  "_parts": Array [
    Array [
      "image",
      Object {
        "localUri": 
     "file:/data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252FLior-3698f362-fc81- 
     4a77-8c97-8cd1349ce090/ImagePicker/d4c4b4ec-72e6-4e20-b6eb-4727bc84d93e.jpg",
      },
    ],
  ],
}

我收到错误 404 或 503.....

后端部分:

  1. 图像控制器:

    const Image = require("../models/image");
    const _ = require("lodash");
    
     exports.getImages = (req, res) => {
    Image.find()
        .select("_id image desc")
        .then(images => {
            res.json({ images });
        })
        .catch(err => console.log("get images errors", err));
      };
    
     //INSERT NEW IMAGE//
       exports.uploadImage = (req, res) => {
        const image = new Image({
        image: req.file.path,
        desc: req.body.desc,
    });
    console.log(image);
    console.log(image);
    
    console.log("ss", image);
    image.save(err => {
        if (err) {
            return res.status(400).json({ error: "העלאת תמונה נכשלה" });
        }
        res.json({ message: "העלאת תמונה עברה בהצלחה" });
    });
    

    };

  2. 图片路线:

    const express = require("express");
     const { getImages, uploadImage } = require("../controllers/image");
    const multer = require("multer");
    
    //configure the images
     const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, "./uploads");
      },
       filename: function (req, file, cb) {
        console.log("f", file);
        cb(null, file.originalname);
      },
      });
    
     const upload = multer({
    storage: storage,
    limits: {
        fileSize: 1024 * 1024 * 55,
    },
    });
    
    const router = express.Router();
    router.get("/images", getImages);
    router.post("/images/new", upload.single("image"), uploadImage);
    module.exports = router;
    

所以也许我的问题可能会偏离路线......因为我不明白我有一条用于图像的路线(上传),以及另一条带有 get 和 post 方法(/images)的路线发布 (/images/new)

编辑。第一部分的错误图片

【问题讨论】:

  • 您能否列出来自 1valueimage从 db 获取)和 2item.imageUrl在你看来
  • 我从 database::::: s Object { "images": Array [ Object { "_id": "5fc4023a907284016211ed4f", "desc": "1", "imageurl": "上传\\a1.jpg", }, Object { "_id": "5fc40255907284016211ed52", "desc": "4", "imageurl": "上传\\a4.jpg", }, ], } ----- ---------------- 例如:console.log(../../server/${item.imageurl}) --->../../server/uploads\f3.jpg
  • 上传之后的双反斜杠 - uploads\\a1.jpg故意吗?
  • 不,而且 / 就像你看到的那样相反(它的 \ )但我不知道它来自
  • 我像这样定义了常规目标: const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, "./uploads"); },并且在index app.use("/uploads", express.static("uploads"));

标签: react-native axios multer


【解决方案1】:

尝试先解决这个问题:-

一个。您的 require 可能无法从 item.imageUrl 读取传入的 value,因为您在 双引号 ("") 中调用了它:-

  • 尝试使用 反引号 (``):-
<Image source={require(`../../server/${item.imageUrl}`)} />

您可以尝试以下两种方法之一:-

  1. 保存图像 pathdb
  • imageUpload 方法/函数中:-
//INSERT NEW IMAGE//
exports.uploadImage = (req, res) => {
  const image = new Image({
    // don't do this
    // image: req.file.path,
    // instead try do this
    image: '/uploads/' + req.file.originalname, 
    desc: req.body.desc,
  });
  console.log(image);
  console.log(image);

  console.log("ss", image);
  image.save(err => {
    if (err) {
      return res.status(400).json({ error: "העלאת תמונה נכשלה" });
    }
    res.json({ message: "העלאת תמונה עברה בהצלחה" });
  });
  1. 保存图像 originalname db
  • imageUpload 方法/函数中:-
//INSERT NEW IMAGE//
exports.uploadImage = (req, res) => {
  const image = new Image({
    // don't do this
    // image: req.file.path,
    // instead try do this
    image: req.file.originalname, 
    desc: req.body.desc,
  });
  console.log(image);
  console.log(image);

  console.log("ss", image);
  image.save(err => {
    if (err) {
      return res.status(400).json({ error: "העלאת תמונה נכשלה" });
    }
    res.json({ message: "העלאת תמונה עברה בהצלחה" });
  });
  • 在“视图”或前端:-
<Image source={require(`../../server/uploads/${item.imageUrl}`)} />

【讨论】:

  • 对不起,它对我没有帮助。我做了其他事情,现在我得到了我需要的图像 url ("imageurl": "uploads/k2.jpg") 在我放了这个 - > image: req.file.path.replace(/\\/g, "/ “),我替换了一点路径,所以现在我有了确切的路径“uploads/k2.jpg”,但问题保持不变“语法错误”......我用反引号``和" " + image.imageurl.
  • 当我尝试 uri: "localhost:8080/uploads/k2.jpg" 它不显示图像
  • 我对@9​​87654336@ 没有太多经验。我认为您应该打开新的question 关注:- 主题:显示图像时出现语法错误 并显示您尝试过的这些 行代码:- 第一个&lt;Image source={require("../../server/uploads/" + item.imageUrl)} /&gt;图像不会显示并出现语法错误)。 2&lt;Image source={require("../../server/uploads/k2.jpg")} /&gt;图片成功显示)。到时候你也许能得到一些帮助。
  • 因为您已经尝试将您的 pathuploads\\k2.jpg 更改为 uploads/k2.jpg。让我意识到你的 path 可能工作就好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2016-03-09
  • 2020-03-13
相关资源
最近更新 更多