最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+SSM實(shí)現(xiàn)圖片上傳預(yù)覽效果

 更新時(shí)間:2021年11月25日 16:13:29   作者:Yuki-W  
這篇文章主要為大家詳細(xì)介紹了Vue+SSM實(shí)現(xiàn)圖片上傳預(yù)覽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

現(xiàn)在的需求是:有一個(gè)上傳文件按鈕,當(dāng)我們點(diǎn)擊按鈕時(shí),可以選擇需要上傳的文件,確定后圖片顯示在界面上。

說明:本項(xiàng)目前端使用的Vue,后臺用的SSM搭建的,服務(wù)器是Tomcat,數(shù)據(jù)庫是MySQL

實(shí)現(xiàn)思路:

前端界面:當(dāng)用戶點(diǎn)擊上傳文件按鈕,選中待上傳圖片并點(diǎn)擊確認(rèn)后,這時(shí)應(yīng)該把圖片數(shù)據(jù)傳給后臺。當(dāng)后臺經(jīng)過處理后返回結(jié)果,前端在根據(jù)響應(yīng)結(jié)果做后續(xù)工作。

后端:后臺拿到前端傳過來的數(shù)據(jù)時(shí),將圖片文件存到固定的文件夾下(這個(gè)問題是我思考了很久的,我認(rèn)為應(yīng)該存在服務(wù)器下,原先我是存在本地文件夾下,然后用路徑去引,這樣說實(shí)話真的好笨,遇到了好多問題,搞了好久,被自己蠢哭)。文件存入后,返回響應(yīng)結(jié)果。如果成功直接返回當(dāng)前圖片的相對路徑,然后前端根據(jù)這個(gè)路徑展示圖片。

現(xiàn)在主要思考的問題是如何將圖片資源放在Tomcat下。

實(shí)現(xiàn)這個(gè)問題,我是在Tomcat下創(chuàng)建了一個(gè)虛擬目錄,今后所有的圖片文件視頻等資源都放在這個(gè)目錄文件夾下

后端實(shí)現(xiàn)上傳圖片步驟如下:

1. 在Tomcat下創(chuàng)建虛擬目錄

在tomcat的根目錄下創(chuàng)建一個(gè)名為FileDir的目錄(當(dāng)然這個(gè)目錄也可以建立在其它的地方)

在tomcat的conf/server.xml,配置虛擬目錄。增加下面這行
<Context path="/FileDir" docBase="G:\安裝包\Tomcat\安裝包\Tomcat 7.0\FileDir"/>

添加一張圖片1.jpg到虛擬目錄中,并啟動tomcat測試。訪問:http://localhost:8080/FileDir/1.jpg??梢哉埱蟮綀D片,說明配置成功。

2. 后端配置

引入文件上傳下載jar包:commons-fileupload-1.3.2.jar和commons-io-1.3.2.jar

編寫SpringMVC配置文件,添加如下代碼:

<!-- 配置文件上傳解析器 -->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- 設(shè)置請求編碼格式 -->
  <property name="defaultEncoding" value="UTF-8"></property>
</bean>

創(chuàng)建一個(gè)用于文件上傳的控制器類FileUploadController

package com.wyf.controller;

import java.io.File;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.wyf.po.Result;
import com.wyf.service.FileServlet;

/**
 * 文件上傳控制器
 * 
 * @author ASUS
 *
 */
@RestController
public class FileUploadController {

 @Autowired
 private FileServlet fileServlet;

 /**
  * 執(zhí)行圖片上傳
  * 
  * 解決前端獲取后臺數(shù)據(jù)中文亂碼:produces={"application/json;charset=UTF-8"}
  */
 @RequestMapping(value = "/uploadImg", method = RequestMethod.POST, produces = { "application/json;charset=UTF-8" })
 public Result handleUploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
  // 判斷所上傳文件是否存在
  if (!file.isEmpty()) {
   // 獲取文件上傳的原始名稱
   String originalFilename = file.getOriginalFilename();
   //存儲圖片的路徑
   String rootPath = "G:\\安裝包\\Tomcat\\安裝包\\Tomcat 7.0\\FileDir\\";
   // 設(shè)置上傳文件的保存地址目錄
   String path = "\\upload\\images\\applyShop";
   String dirPath = rootPath + path + "\\";
   File filePath = new File(dirPath);
   // 如果保存文件的地址不存在,就先創(chuàng)建目錄
   if (!filePath.exists()) {
    filePath.mkdirs();
   }
   // 重新命名
   String newFileName = UUID.randomUUID() + "_" + originalFilename;
   try {
    // 使用MultipartFile接口的方法完成文件上傳到指定位置
    file.transferTo(new File(dirPath + newFileName));
   } catch (Exception e) {
    e.printStackTrace();
    return new Result(false, "上傳錯誤");
   }
   // 返回相對路徑
   String srcPath = path + "\\" + newFileName;
   fileServlet.addUploadFIle(srcPath);
   return new Result(true, srcPath);
  }
  return new Result(false, "文件不存在");
 }
}

這里用了一個(gè)Result類來返回?cái)?shù)據(jù),用來封裝返回的結(jié)果信息,以JSON格式返回給前端。代碼如下:

public class Result {

 private boolean flag;//處理結(jié)果標(biāo)識
 private String message;//返回的結(jié)果信息
 /* 省略get()和set()*/
}

前端Vue界面,發(fā)送請求給后臺后,通過動態(tài)綁定src屬性,獲取拿到的圖片路徑

<template>
  <div class="upload">
    <div class="img-container">
      <!-- 上傳預(yù)覽圖片 -->
      <img :src="src" alt />
    </div>
    <!-- 文件上傳的input -->
    <form class="input-file" enctype="multipart/form-data" method="post">
      <input type="file" ref="upload" name="uploadImg" id="file" @change="getFile" multiple />
      <!-- label一個(gè) for 屬性指向input的唯一 id ,這樣點(diǎn)擊label就相當(dāng)于點(diǎn)擊input -->
      <label for="file">上傳圖片</label>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
     src:require('../../assets/dist/images/admin.jpg'),
     srcPath:''//圖片相對路徑
    };
  },
  methods: {
   getFile(e) {
    let files = e.target.files[0]; //獲取上傳圖片信息
  let formData = new FormData()
       formData.append('file',files)
      this.$axios.post("/api/uploadImg",formData).then(result=>{
       if(result.data.flag){
            this.srcPath = result.data.message
            this.src = `/imgURL${this.srcPath}`
            }else{
            console.log(result.data.message)
        }
      })
    }
  }
};
</script>

到這一步,基本能實(shí)現(xiàn)圖片的上傳和預(yù)覽。但是有bug,中文亂碼問題。如果圖片路徑帶中文,src解析不出來,這個(gè)問題我也解決了很久。

找了各種百度,最后還是用的修改tomcat的server.xml配置文件方法。
我思考了一下出現(xiàn)亂碼的原因,因?yàn)槲业膱D片資源是通過訪問tomcat拿到的,所以當(dāng)img標(biāo)簽動態(tài)綁定后臺傳過來的路徑時(shí),提交的方式是get請求。前臺拿到的路徑中文是正確的,但是在tomcat下就會亂碼,tomcat默認(rèn)的編碼方式是iso8859-1對中文編碼,而前端設(shè)置的編碼方式是utf-8,所以就出現(xiàn)了亂碼。

我的解決辦法是修改tomcat的server.xml配置文件

在tomcat的server.xml中找到

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

將這行修改為

<!--解決地址欄輸入中文亂碼問題在<Connector中加入 useBodyEncodingForURI="true" URIEncoding="UTF-8" -->
<!--useBodyEncodingForURI="true":代表get和post請求用一樣的編碼  -->
<!--URIEncoding="UTF-8":請求編碼為utf-8  -->
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"     useBodyEncodingForURI="true"/>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue表單數(shù)據(jù)交互提交演示教程

    vue表單數(shù)據(jù)交互提交演示教程

    今天小編就為大家分享一篇vue表單數(shù)據(jù)交互提交演示教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue-router定義元信息meta操作

    vue-router定義元信息meta操作

    這篇文章主要介紹了vue-router定義元信息meta操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • vue 監(jiān)聽input輸入事件(oninput)的示例代碼支持模糊查詢

    vue 監(jiān)聽input輸入事件(oninput)的示例代碼支持模糊查詢

    這篇文章主要介紹了vue 監(jiān)聽input輸入事件(oninput)支持模糊查詢,比如說表格模糊查詢,實(shí)現(xiàn)一邊輸入,一邊過濾數(shù)據(jù),本文通過示例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • 去除Element-Plus下拉菜單邊框的實(shí)現(xiàn)步驟

    去除Element-Plus下拉菜單邊框的實(shí)現(xiàn)步驟

    Element-Plus 是 Element UI 的 Vue 3 版本,它提供了一套完整的組件庫,在使用 Element-Plus 進(jìn)行開發(fā)時(shí),我們可能會遇到需要自定義組件樣式的情況,本文將介紹如何使用 CSS 來去除 Element-Plus 下拉框的邊框,需要的朋友可以參考下
    2024-03-03
  • Vue內(nèi)聯(lián)處理器中訪問方法和訪問事件參數(shù)詳解

    Vue內(nèi)聯(lián)處理器中訪問方法和訪問事件參數(shù)詳解

    在 Vue 3 中,使用組合式 API 時(shí),可以通過內(nèi)聯(lián)事件處理器來直接在模板中編寫事件處理邏輯,內(nèi)聯(lián)事件處理器不僅可以直接執(zhí)行簡單的操作,還可以調(diào)用組件中的方法,并訪問事件參數(shù),下面將詳細(xì)講解如何在內(nèi)聯(lián)事件處理器中調(diào)用方法以及訪問事件參數(shù),需要的朋友可以參考下
    2024-12-12
  • VUE前端實(shí)現(xiàn)token的無感刷新3種方案(refresh_token)

    VUE前端實(shí)現(xiàn)token的無感刷新3種方案(refresh_token)

    這篇文章主要給大家介紹了關(guān)于VUE前端實(shí)現(xiàn)token的無感刷新3種方案(refresh_token)的相關(guān)資料,為了提供更好的用戶體驗(yàn),我們可以通過實(shí)現(xiàn)Token的無感刷新機(jī)制來避免用戶在使用過程中的中斷,需要的朋友可以參考下
    2023-11-11
  • VueJS組件之間通過props交互及驗(yàn)證的方式

    VueJS組件之間通過props交互及驗(yàn)證的方式

    本篇文章主要介紹了VueJS組件之間通過props交互及驗(yàn)證的方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-09-09
  • 仿vue-cli搭建屬于自己的腳手架的方法步驟

    仿vue-cli搭建屬于自己的腳手架的方法步驟

    這篇文章主要介紹了仿vue-cli搭建屬于自己的腳手架的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能

    vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能

    這篇文章主要介紹了vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • vuex Module將 store 分割成模塊的操作

    vuex Module將 store 分割成模塊的操作

    這篇文章主要介紹了vuex Module將 store 分割成模塊,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

岑溪市| 京山县| 个旧市| 垣曲县| 城固县| 广水市| 太白县| 溧水县| 民权县| 青神县| 梨树县| 龙泉市| 滁州市| 原阳县| 平度市| 县级市| 黄石市| 巫山县| 梁平县| 连州市| 济源市| 林州市| 龙海市| 锡林浩特市| 高州市| 永兴县| 武平县| 中阳县| 遵义市| 宜兴市| 芒康县| 孟州市| 普洱| 扎囊县| 南江县| 芜湖市| 崇礼县| 尼木县| 九龙坡区| 萍乡市| 皮山县|