• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    React+ajax實現上傳圖片前先預覽圖片

    來源:懂視網 責編:小采 時間:2020-11-27 19:57:18
    文檔

    React+ajax實現上傳圖片前先預覽圖片

    React+ajax實現上傳圖片前先預覽圖片:這次給大家帶來React+ajax實現上傳圖片前先預覽圖片,React+ajax實現上傳圖片前先預覽圖片的注意事項有哪些,下面就是實戰案例,一起來看一下。之前有在網上找ajax上傳圖片的資料,大部分的人寫得都是用jQuery,但是在這里用JQuery就大才小用了,所以我
    推薦度:
    導讀React+ajax實現上傳圖片前先預覽圖片:這次給大家帶來React+ajax實現上傳圖片前先預覽圖片,React+ajax實現上傳圖片前先預覽圖片的注意事項有哪些,下面就是實戰案例,一起來看一下。之前有在網上找ajax上傳圖片的資料,大部分的人寫得都是用jQuery,但是在這里用JQuery就大才小用了,所以我
    這次給大家帶來React+ajax實現上傳圖片前先預覽圖片,React+ajax實現上傳圖片前先預覽圖片的注意事項有哪些,下面就是實戰案例,一起來看一下。

    之前有在網上找ajax上傳圖片的資料,大部分的人寫得都是用jQuery,但是在這里用JQuery就大才小用了,所以我就自己寫了,先上圖。

    由上圖,首先點擊上面的選擇文件,在選擇圖片之后,將會自動上傳圖片到服務器,并且返回圖片名字和圖片在服務器的路徑,然后在頁面顯示文件名字和圖片。

    源碼:ajax上傳預覽

    React中:

    import React from 'react';
    import Http from './http'
    const URL = 'http://localhost:8080/fileuploadExample/UploadServlet';
    export default class App extends React.Component {
     constructor(props) {
     super(props);
     this.state = {
     uploadedFile: "",
     uploadedFileGetUrl: ''
     };
     }
     error() {
     alert('error')
     }
     callback(result) {
     this.setState({
     uploadedFile: result.uploadedFile,
     uploadedFileGetUrl: result.uploadedFileGetUrl
     });
     }
     handleImageUpload(e) {
     e.preventDefault()
     let file = e.target
     Http.post(URL, file, this.callback.bind(this), this.error)
     }
     render() {
     return (
     <p>
     <input type="file" onChange={this.handleImageUpload.bind(this)}/>
     <p>
     {this.state.uploadedFileGetUrl === '' ? null :
     <p>
     <p>{this.state.uploadedFile}</p>
     <img src={this.state.uploadedFileGetUrl} alt="你選擇的圖片"/>
     </p>}
     </p>
     </p>
     )
     }
    }

    自己封裝的Ajax代碼:

    var Http = (function() {
     var http = {};
     if (typeof window.XMLHttpRequest === "undefined") {
     window.XMLHttpRequest = function() {
     // 如果是i5就用Microsoft,其他就用Msxml2
     return new window.ActiveXObject(navigator.userAgent
     .indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP"
     : "Msxml2.XMLHTTP");
     };
     }
     http.post = function(url, data, callback, error) {
     if (typeof data === "function") {//data可以不穿值
     callback = data;
     data = null;
     }
     var timeout = setTimeout(function() {//超時設置
     error();
     }, 10000);
     var xhr = new XMLHttpRequest();
     xhr.open('post', url);
     xhr.onreadystatechange = function() {
     if (xhr.readyState === 4) {
     clearTimeout(timeout);//清除超時
     if (xhr.status === 200){
     //alert(xhr.responseText);
     callback(JSON.parse(xhr.responseText));//調用回調函數
     } else {
     error();
     }
     xhr = null;// 刪除對象,防止內存溢出
     }
     };
     xhr.onerror = function() {//如果產生了錯誤
     clearTimeout(timeout);
     error();
     };
     xhr.send(http.formDataCode(data));
     };
     http.formDataCode = function(data) {
     var fd = new FormData();
     if (!data) {
     return null;
     }
     for ( var key in data) {
     if(data.files){
     var file=data.files[0];
     fd.append("image", file);
     }else{
     fd.append(key, data[key]);
     }
     }
     return fd;
     }
     return http;
    })();
    export default Http

    在java后臺上傳圖片方面,網上有很多例子都可以用,我借鑒的是ajax異步文件上傳,servlet處理,含demo這篇,有興趣可以看一下:

    package com.example;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    import java.util.List;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONObject;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    /**
     * Servlet implementation class UploadServlet
     */
    @WebServlet("/UploadServlet")
    public class UploadServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;
     // 保存文件的目錄
     private static String PATH_FOLDER = "/";
     // 存放臨時文件的目錄
     private static String TEMP_FOLDER = "/";
     /**
     * @see HttpServlet#HttpServlet()
     */
     public UploadServlet() {
     super();
     // TODO Auto-generated constructor stub
     }
     @Override
     public void init(ServletConfig config) throws ServletException {
     // TODO Auto-generated method stub
     super.init();
     ServletContext servletCtx = config.getServletContext();
     // 初始化路徑
     // 保存文件的目錄
     PATH_FOLDER = servletCtx.getRealPath("/upload");
     // 存放臨時文件的目錄,存放xxx.tmp文件的目錄
     TEMP_FOLDER = servletCtx.getRealPath("/uploadTemp");
     }
     /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     * response)
     */
     protected void doGet(HttpServletRequest request,
     HttpServletResponse response) throws ServletException, IOException {
     response.setHeader("Access-Control-Allow-Origin",
     "http://localhost:3000");
     response.setHeader("Access-Control-Allow-Credentials", "true");
     request.setCharacterEncoding("utf-8"); // 設置編碼
     response.setCharacterEncoding("utf-8");
     response.setContentType("text/html;charset=UTF-8");
     // 獲得磁盤文件條目工廠
     DiskFileItemFactory factory = new DiskFileItemFactory();
     // 如果沒以下兩行設置的話,上傳大的 文件 會占用 很多內存,
     // 設置暫時存放的 存儲室 , 這個存儲室,可以和 最終存儲文件 的目錄不同
     /**
     * 原理 它是先存到 暫時存儲室,然后在真正寫到 對應目錄的硬盤上, 按理來說 當上傳一個文件時,其實是上傳了兩份,第一個是以 .tem
     * 格式的 然后再將其真正寫到 對應目錄的硬盤上
     */
     factory.setRepository(new File(TEMP_FOLDER));
     // 設置 緩存的大小,當上傳文件的容量超過該緩存時,直接放到 暫時存儲室
     factory.setSizeThreshold(1024 * 1024);
     // 高水平的API文件上傳處理
     ServletFileUpload upload = new ServletFileUpload(factory);
     try {
     // 提交上來的信息都在這個list里面
     // 這意味著可以上傳多個文件
     // 請自行組織代碼
     List<FileItem> list = upload.parseRequest(request);
     // 獲取上傳的文件
     FileItem item = getUploadFileItem(list);
     // 獲取文件名
     String filename = getUploadFileName(item);
     // 保存后的文件名
     String saveName = new Date().getTime()
     + filename.substring(filename.lastIndexOf("."));
     // 保存后圖片的瀏覽器訪問路徑
     String picUrl = request.getScheme() + "://"
     + request.getServerName() + ":" + request.getServerPort()
     + request.getContextPath() + "/upload/" + saveName;
     System.out.println("存放目錄:" + PATH_FOLDER);
     System.out.println("文件名:" + filename);
     System.out.println("瀏覽器訪問路徑:" + picUrl);
     // 真正寫到磁盤上
     item.write(new File(PATH_FOLDER, saveName)); // 第三方提供的
     PrintWriter writer = response.getWriter();
     System.out.print("{");
     System.out.print("uploadedFile:"+ "\"" + filename + "\"");
     System.out.print(",uploadedFileGetUrl:\"" + picUrl + "\"");
     System.out.print("}");
     
     JSONObject result = new JSONObject();
     result.put("uploadedFile", filename);
     result.put("uploadedFileGetUrl", picUrl);
     writer.write(result.toString());
     writer.close();
     } catch (Exception e) {
     e.printStackTrace();
     /*
     * PrintWriter writer = response.getWriter(); writer.print("{");
     * writer.print("error:"+e.toString()); writer.print("}");
     * writer.close();
     */
     }
     }
     private FileItem getUploadFileItem(List<FileItem> list) {
     for (FileItem fileItem : list) {
     if (!fileItem.isFormField()) {
     return fileItem;
     }
     }
     return null;
     }
     private String getUploadFileName(FileItem item) {
     // 獲取路徑名
     String value = item.getName();
     System.out.println(value + ":value");
     // 索引到最后一個反斜杠
     int start = value.lastIndexOf("/");
     // 截取 上傳文件的 字符串名字,加1是 去掉反斜杠,
     String filename = value.substring(start + 1);
     return filename;
     }
     /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     * response)
     */
     protected void doPost(HttpServletRequest request,
     HttpServletResponse response) throws ServletException, IOException {
     doGet(request, response);
     }
    }

    以上java代碼這里修改了這幾點:

    1、插入

    response.setHeader("Access-Control-Allow-Origin","http://localhost:3000");
    response.setHeader("Access-Control-Allow-Credentials", "true");

    這兩行代碼,進行跨域,當然,這個可能不安全

    2、

    JSONObject result = new JSONObject();
    result.put("uploadedFile", filename);
    result.put("uploadedFileGetUrl", picUrl);
    writer.write(result.toString());

    在這里,頁面和服務器之間使用json數據傳輸的

    相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

    推薦閱讀:

    怎么用ajax實現提交評論并自動刷新

    AJAX在不刷新的情況下檢測輸入的用戶名

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    React+ajax實現上傳圖片前先預覽圖片

    React+ajax實現上傳圖片前先預覽圖片:這次給大家帶來React+ajax實現上傳圖片前先預覽圖片,React+ajax實現上傳圖片前先預覽圖片的注意事項有哪些,下面就是實戰案例,一起來看一下。之前有在網上找ajax上傳圖片的資料,大部分的人寫得都是用jQuery,但是在這里用JQuery就大才小用了,所以我
    推薦度:
    標簽: 圖片 上傳 實現
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 免费视频成人国产精品网站 | 99免费精品视频| 国产国产成人久久精品| 久久丫精品国产亚洲av不卡| 久久精品人妻一区二区三区| 日韩精品免费在线视频| 精品一区二区三区免费毛片爱| 久久午夜无码鲁丝片午夜精品| 欧美亚洲国产精品久久蜜芽| 精品无码一区二区三区亚洲桃色| 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国 | 国产精品亚洲片在线va| 污污网站国产精品白丝袜| 成人精品一区二区三区| 国产成人精品综合网站| 久久精品国产亚洲精品2020| 亚洲精品无码日韩国产不卡?V| 99精品国产一区二区| 国产精品视频免费观看| 国产精品无码无片在线观看| 日韩精品亚洲人成在线观看| 四虎成人精品国产永久免费无码| 国产农村妇女毛片精品久久| 99re只有精品8中文| 午夜精品成年片色多多| 国产精品扒开腿做爽爽爽视频| 色国产精品一区在线观看| 99久久精品国产高清一区二区| 久久国产精品无码HDAV| 欧洲成人午夜精品无码区久久| 亚洲一区精品伊人久久伊人| 亚洲AV无码成人精品区狼人影院| 久久精品国产72国产精福利| 国产香蕉国产精品偷在线| 99热成人精品国产免男男| 93精91精品国产综合久久香蕉| 777国产盗摄偷窥精品0OOO| 中文精品久久久久国产网址| 亚洲一二成人精品区| 91精品国产91久久久久久青草| 91午夜精品亚洲一区二区三区|