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}`);});
我试过后端路由更改没有效果
、
你把这玩意儿打印出来就知道为啥了。这是个 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.