当前位置: 首页 > 知识库问答 >
问题:

vue.js - element plus上传本地图片显示404?

宋经赋
2024-03-11

element plus上传本地图片显示404

<template>  <el-form :model="formData" label-width="100px">    <el-form-item label="名称" required>      <el-input v-model="formData.name"></el-input>    </el-form-item>    <el-form-item label="分类" required>      <el-input v-model="formData.category"></el-input>    </el-form-item>    <el-form-item label="图片" required>      <el-upload        action="/api/uploadImage"        :show-file-list="false"        :before-upload="beforeUploadImage"        :on-success="handleSuccessImage">        <el-button size="small" type="primary">上传图片</el-button>      </el-upload>    </el-form-item>    <el-form-item label="文本" required>      <el-upload        action="/api/uploadText"        :show-file-list="false"        :before-upload="beforeUploadText"        :on-success="handleSuccessText">        <el-button size="small" type="primary">上传文本</el-button>      </el-upload>    </el-form-item>    <el-form-item label="音频" required>      <el-upload        action="/api/uploadAudio"        :show-file-list="false"        :before-upload="beforeUploadAudio"        :on-success="handleSuccessAudio">        <el-button size="small" type="primary">上传音频</el-button>      </el-upload>    </el-form-item>    <el-form-item>      <el-button type="primary" @click="submitForm">提交</el-button>    </el-form-item>  </el-form></template><script>import axios from '../api/axios'export default {  data() {    return {      formData: {        name: '',        category: '',        image: '',        text: '',        audio: ''      }    };  },  methods: {    beforeUploadImage(file) {      console.log(this.beforeUploadFile(file, 'image'))      return this.beforeUploadFile(file, 'image');    },    beforeUploadText(file) {      return this.beforeUploadFile(file, 'text');    },    beforeUploadAudio(file) {      return this.beforeUploadFile(file, 'audio');    },    beforeUploadFile(file, type) {      const allowedTypes = {        image: ['image/jpeg', 'image/png'],        text: ['text/plain'],        audio: ['audio/mpeg', 'audio/wav']      };      if (!allowedTypes[type].includes(file.type)) {        this.$message.error(`上传${type === 'audio' ? '音频' : type}格式不正确`);        return false;      }      return true;    },    handleSuccessImage(response) {      this.formData.image = response.url;    },    handleSuccessText(response) {      this.formData.text = response.url;    },    handleSuccessAudio(response) {      this.formData.audio = response.url;    },    submitForm() {      axios.post('/users', this.formData)        .then(response => {          console.log('提交成功', response);          this.$message.success('提交成功');          this.resetForm();        })        .catch(error => {          console.error('提交失败', error);          this.$message.error('提交失败');        });    },    resetForm() {      this.formData.name = '';      this.formData.category = '';      this.formData.image = '';      this.formData.text = '';      this.formData.audio = '';    }  }};</script>
const express = require("express");const bodyParser = require("body-parser");const mongoose = require("mongoose");const cors = require("cors");const path = require("path");const multer = require("multer");const app = express();app.use(cors());const PORT = process.env.PORT || 3000;// 连接到 MongoDB 数据库mongoose  .connect("mongodb://127.0.0.1:27017/user", {    useNewUrlParser: true,    useUnifiedTopology: true,  })  .then(() => console.log("MongoDB 连接成功"))  .catch((err) => console.error("MongoDB 连接错误", err));// 定义用户数据模型const UserSchema = new mongoose.Schema({  name: String,  category: String,  image: String,  text: String,  audio: String,});const User = mongoose.model("User", UserSchema);// 设置文件上传的存储引擎和路径const storage = multer.diskStorage({  destination: function (req, file, cb) {    if (file.fieldname === "image") {      cb(null, "uploads/images");    } else if (file.fieldname === "text") {      cb(null, "uploads/texts");    } else if (file.fieldname === "audio") {      cb(null, "uploads/audios");    }  },  filename: function (req, file, cb) {    const extname = path.extname(file.originalname);    cb(null, Date.now() + extname);  },});const upload = multer({ storage: storage });// 处理文件上传的路由app.post("/api/uploadImage", upload.single("image"), (req, res) => {  res.json({ url: req.file.path });});app.post("/api/uploadText", upload.single("text"), (req, res) => {  res.json({ url: req.file.path });});app.post("/api/uploadAudio", upload.single("audio"), (req, res) => {  res.json({ url: req.file.path });});// 处理用户数据上传的路由app.post("/users", (req, res) => {  const userData = req.body;  User.create(userData)    .then((resr) => {      console.log("用户创建成功", res);    })    .catch((err) => {      console.error("创建用户失败", err);    });});// 获取所有用户app.get("/users", async (req, res) => {  try {    const users = await User.find();    res.json(users);  } catch (error) {    console.error("获取用户错误:", error);    res.status(500).json({ error: "获取用户错误" });  }});// 启动服务器app.listen(PORT, () => {  console.log(`服务器运行在 http://localhost:${PORT}`);});

我试过后端路由更改没有效果

共有1个答案

仲孙鸿畴
2024-03-11

image.png

你把这玩意儿打印出来就知道为啥了。这是个 file:// 本地绝对路径。

 类似资料:
  • 问题内容: 在我的HTML表单中,我输入了类型为file的文件,例如: 然后,通过单击该输入按钮来选择多个文件。现在,我想在提交表单之前显示所选图像的预览。如何在HTML 5中做到这一点? 问题答案: HTML5带有FileAPI规范,它使您可以创建应用程序,使用户可以在本地与文件交互;这意味着您可以加载文件并在浏览器中呈现它们,而无需实际上传文件。FileAPI的一部分是FileReader接口

  • 问题内容: 我正在将蜻蜓与jruby和apache tomcat一起使用来上传图像。我正在尝试显示使用profile_picture.thumb(‘30x30#’)。url动态修饰的图像 当我在轨道上使用ruby运行应用程序时,图像会正确显示。但是当我使用apache tomcat运行它时,图像不显示。 我认为,当我们在中部署war文件时,约定profile_picture.thumb(‘30x3

  • 通过本案例,我们实现blobImage上传的图片在grid表格中的显示。 grid的cellRender方法渲染单元格显示图片,例: Model.prototype.personGridCellRender = function(event){ if(event.colName == "sPhoto"){ var url = biz.Request.setBizPar

  • 通过这个示例我们实现通过attachmentImage上传的图片在grid表格中显示,分成两个步骤: 1.引入DocUtils: DocUtils = require('$UI/system/components/justep/docCommon/docUtil'); 2.通过grid的cellRender方法来显示图片 例: Model.prototype.imageGridCellRender

  • 本文向大家介绍vue.js 实现图片本地预览 裁剪 压缩 上传功能,包括了vue.js 实现图片本地预览 裁剪 压缩 上传功能的使用技巧和注意事项,需要的朋友参考一下 以下代码涉及 Vue 2.0 及 ES6 语法。 目标 纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式、长宽、大小的检测,减少浏览器交互。 现实是残酷的,为了兼容Ie9 还是用上了 flash,第二篇来解

  • 通过本案例,我们实现blobImage上传的图片在报表中的显示。 存图片的字段里面的内容是二进制格式的,需要通过写java代码调用blobDownloadAction获得数据库中存储的图片的url,因此reportData不能使用KSQLAction,要使用Action。下面是java代码完整案例。 1.action中代码 import java.math.*; import java.sql.