若依图片上传到服务器,前端显示图片

效果图如下:

 前端代码:

//-----------table显示图片
 <el-table-column label="图片地址" align="center" prop="url" >
        <template slot-scope="scope">
            <el-image
              style="width: 100px; height: 100px"
              :src="pjtUrl+scope.row.url"
              :fit="fit">
            </el-image>
        </template>
 </el-table-column>
//-----------新增或修改方法里上传图片
  <el-form-item label="图片地址" prop="url" label-width="40">
              <el-upload
                :action="imgUpload.url"
                :headers="imgUpload.headers"
                list-type="picture-card"
                :limit="limit"
                :on-exceed="handleExceed"
                :on-success="handlePictureSuccess"
                :before-upload="beforeAvatarUpload"
                :on-preview="handlePictureCardPreview"
                :file-list="fileList"
             >
                <i class="el-icon-plus"></i>
              </el-upload>
              <el-dialog :visible.sync="dialogVisible">
                <img width="100%" v-if="imageUrl" :src="imageUrl" alt="">
              </el-dialog>
 </el-form-item>
//--------导入token
import { getToken } from "@/utils/auth";

//--------data参数
  pjtUrl: process.env.VUE_APP_BASE_API,
  // 图片数量限制
  limit: 1,
  //页面上存的暂时图片地址List
  fileList: [{url: ""}],
  //图片地址
  imageUrl: "",
  dialogVisible: false,
  imgUpload: {
  // 设置上传的请求头部
  headers: {
      Authorization: "Bearer " + getToken()
   },
   // 图片上传的方法地址:
     url: process.env.VUE_APP_BASE_API + "/business/picture/articleImg",
  },
//-----------方法
 // 表单重置
  reset() {
      this.fileList = undefined;//加的是这一行
      this.form = {
        id: null,
        name: null,
        url: null
      };
      this.resetForm("form");
    },
   /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id || this.ids
      getPicture(id).then(response => {
        this.fileList = [{ url: process.env.VUE_APP_BASE_API + response.data.url}]//加的是这一行
        this.form = response.data;
        this.open = true;
        this.title = "修改图片信息";
      });
    },
  /** 提交按钮 */
    submitForm() {
      this.form.url = this.imageUrl; // 注:重要(用于添加到数据库),加的是这一行
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
            updatePicture(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addPicture(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },

  //图片上传前的相关判断
    beforeAvatarUpload(file) {
      const isJPG = file.type === 'image/jpeg' || file.type == 'image/png';
      const isLt2M = file.size / 1024 / 1024 < 5;
      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG/PNG 格式!');
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 5MB!');
      }
      return isJPG && isLt2M;
    },
    //图片预览
    handlePictureCardPreview(file) {
      this.imageUrl = file.url;
      this.dialogVisible = true;
    },
    //图片上传成功后的回调
    handlePictureSuccess(res, file) {
      //设置图片访问路径 (url 后台传过来的的上传地址)
      this.imageUrl = file.response.url;
    },
    // 文件个数超出
    handleExceed() {
      this.$modal.msgError(`上传链接LOGO图片数量不能超过 ${this.limit} 个!`);
    },

后端代码:

   /**
     * 缩略图上传
     */
    @Log(title = "预览缩略图", businessType = BusinessType.UPDATE)
    @PostMapping("/articleImg")
    public AjaxResult uploadFile(MultipartFile file) throws IOException
    {
        if (!file.isEmpty())
        {
            String articleImg = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), file);
            if (!StringUtils.isEmpty(articleImg))
            {
                AjaxResult ajax = AjaxResult.success();
                ajax.put("url", articleImg);
                return ajax;
            }
        }
        return AjaxResult.error("上传图片异常,请联系管理员");
    }

好的,以下是一个简单的实现方法: 1. 在 HTML 页面上添加一个文件选择框和一个按钮,用于触发上传事件: ```html <input type="file" id="fileInput"> <button onclick="upload()">上传</button> ``` 2. 在 JavaScript 中定义上传函数 `upload()`,获取用户选择的文件,并创建一个 FormData 对象,将文件添加到 FormData 中,同时添加一个自定义参数 `folder`,用于指定上传到服务器的哪个文件夹: ```javascript function upload() { // 获取文件选择框中的文件 const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; // 创建 FormData 对象 const formData = new FormData(); // 添加文件到 FormData 中 formData.append('file', file); // 添加自定义参数到 FormData 中 formData.append('folder', 'uploads'); // 发送 POST 请求 const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.send(formData); } ``` 3. 在服务器端接收到 POST 请求后,解析 FormData 中的文件和自定义参数,将文件保存到指定的文件夹中。这里以 Node.js 为例: ```javascript const express = require('express'); const app = express(); const multer = require('multer'); const path = require('path'); // 设置文件上传的目录 const storage = multer.diskStorage({ destination: function (req, file, cb) { const folder = req.body.folder || 'uploads'; cb(null, folder); }, filename: function (req, file, cb) { cb(null, Date.now() + path.extname(file.originalname)); } }); const upload = multer({ storage: storage }); // 处理文件上传的 POST 请求 app.post('/upload', upload.single('file'), (req, res) => { res.send('上传成功'); }); ``` 4. 在上传成功后,将上传的图片前端页面中显示出来。这里使用 FileReader API 将图片文件读取为 Base64 编码,然后将 Base64 编码的字符串作为图片的 `src` 属性值,显示在页面中: ```javascript function upload() { // 获取文件选择框中的文件 const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; // 创建 FormData 对象 const formData = new FormData(); // 添加文件到 FormData 中 formData.append('file', file); // 添加自定义参数到 FormData 中 formData.append('folder', 'uploads'); // 发送 POST 请求 const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.onload = function () { // 上传成功后,将图片显示出来 const reader = new FileReader(); reader.onload = function () { const img = document.createElement('img'); img.src = reader.result; document.body.appendChild(img); }; reader.readAsDataURL(file); }; xhr.send(formData); } ``` 以上就是一个简单的上传图片显示的实现方法。需要注意的是,上传图片的过程中,需要对图片进行一些验证和处理,比如检查图片类型、大小、防止上传恶意脚本等。此外,服务器应该设置好文件夹的权限,避免上传到不该上传的文件夹中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值