主頁 > 區塊鏈 > 2006-京淘Day07

2006-京淘Day07

2020-09-30 20:34:56 區塊鏈

1. 商品后臺管理

1.1 商品修改操作

1.1.1 頁面URL分析

在這里插入圖片描述

1.1.2 引數分析

在這里插入圖片描述

1.1.3 回傳值結果確定

在這里插入圖片描述

1.1.4 編輯ItemController

/**
	 * 商品修改操作
	 * 1.url地址: http://localhost:8091/item/update
	 * 2.引數:	  form表單提交
	 * 3.回傳值:  SysResult物件
	 */
	@RequestMapping("/update")
	public SysResult updateItem(Item item){

		itemService.updateItem(item);
		return SysResult.success();
	}

1.1.5 編輯ItemService

@Override
	public void updateItem(Item item) {

		//更新時間由程式自動填充....
		itemMapper.updateById(item);
	}

1.2 商品洗掉

1.2.1 url請求地址說明

在這里插入圖片描述

1.2.2 請求引數

在這里插入圖片描述

1.2.3 回傳值型別

在這里插入圖片描述

1.2.4 編輯ItemController

/**
	 * 業務: 商品洗掉
	 * url地址: http://localhost:8091/item/delete
	 * 引數:    ids: 1474391993,1474391997,1474391996
	 * 回傳值:  系統回傳值VO
	 * List 可以賦值 name="list[0]" value=100
	 * 				name="list[1]" value=200
	 */
	@RequestMapping("/delete")
	public SysResult deleteItems(Long[] ids){

		itemService.deleteItems(ids);
		return SysResult.success();
	}

1.2.4 編輯ItemService

@Override
	public void deleteItems(Long[] ids) {
		//1.將陣列轉化為集合
		List<Long> longList = Arrays.asList(ids);
		itemMapper.deleteBatchIds(longList);
	}

1.3 商品上架/下架操作

1.3.1 業務說明

說明:當用戶點擊上架/下架的按鈕時,需要修改item資料表中的status資訊.同時修改時間…
在這里插入圖片描述

1.3.2 頁面分析

在這里插入圖片描述

1.3.3 引數分析

在這里插入圖片描述

1.3.4回傳值結果分析

在這里插入圖片描述

1.3.5 修改頁面url地址

在這里插入圖片描述
在這里插入圖片描述

1.3.6 編輯ItemController

/**
	 * 實作商品的下架
	 * url地址: http://localhost:8091/item/updateStatus/2    status=2
	 * 			http://localhost:8091/item/updateStatus/1   status=1
	 * 利用RestFul風格實作通用的操作.
	 * 引數:   ids: 1474391997,1474391996,1474391995
	 * 回傳值:  VO物件
	 */
	@RequestMapping("/updateStatus/{status}")
	public SysResult updateStatus(@PathVariable Integer status,Long[] ids){

		itemService.updateStatus(status,ids);
		return SysResult.success();
	}

1.3.7 編輯ItemService

/**
	 * sql: update tb_item set status = #{status},updated={date}
	 * 		where id in (id1,id2,id3)
	 * 	MP機制實作
	 * @param status
	 * @param ids
	 */
	@Override
	public void updateStatus(Integer status, Long[] ids) {

		Item item = new Item();	//封裝修改的值
		item.setStatus(status);
		UpdateWrapper<Item> updateWrapper = new UpdateWrapper<>();
		updateWrapper.in("id", Arrays.asList(ids));
		itemMapper.update(item,updateWrapper);
	}

2. 富文本編輯器

2.1 富文本編輯器介紹

KindEditor是一套開源的HTML可視化編輯器,主要用于讓用戶在網站上獲得所見即所得編輯效果,兼容IE、Firefox、Chrome、Safari、Opera等主流瀏覽器,

2.2 入門案例

<script type="text/javascript">
	$(function(){
		KindEditor.ready(function(){
		    //在指定的位置創建富文本.
			KindEditor.create("#editor")
		})
	})
</script>
</head>
<body>
<h1>富文本編輯器</h1>
<textarea style="width:700px;height:350px" id="editor"></textarea>
</body>

在這里插入圖片描述

2.3 關于商品模塊的表設計

表業務說明: 商品表中的id與商品詳情表中的ID是一致的.
在這里插入圖片描述

2.4 編輯ItemDesc POJO物件

@TableName("tb_item_desc")
@Data
@Accessors(chain = true)
public class ItemDesc extends BasePojo{

    //item中的id與ItemDesc中的Id應該保持一致...
    @TableId    //只標識主鍵  不能自增.
    private Long itemId;
    private String itemDesc;
}

2.5 重構商品新增

2.5.1 編輯ItemController

@RequestMapping("/save")
	public SysResult saveItem(Item item, ItemDesc itemDesc){

		itemService.saveItem(item,itemDesc);
		return SysResult.success();
	
	}

2.5.2 編輯ItemService

@Override
	@Transactional	//控制事務
	public void saveItem(Item item, ItemDesc itemDesc) {
		//思考:如果每次編輯資料庫 每次都需要操作公共的屬性...
		//完成自動的填充功能
		//Date date = new Date();
		//item.setStatus(1).setCreated(date).setUpdated(date);
		item.setStatus(1);
		//如果完成入庫操作,時應該動態回顯主鍵資訊.
		//MP的方式實作資料入庫操作,MP會自動的實作主鍵資訊的回顯..
		itemMapper.insert(item);

		//itemDesc屬性有值
		itemDesc.setItemId(item.getId());
		itemDescMapper.insert(itemDesc);
	}

2.6 商品詳情回顯

2.6.1 頁面url分析

在這里插入圖片描述

2.6.2 頁面JS

在這里插入圖片描述

2.6.3 編輯ItemController

/**
	 * 業務:動態獲取商品詳情資訊
	 * url地址: http://localhost:8091/item/query/item/desc/1474391999
	 * 引數:   itemId restFul方式獲取
	 * 回傳值: 系統VO物件
	 */
	@RequestMapping("/query/item/desc/{itemId}")
	public SysResult findItemDescById(@PathVariable Long itemId){

		ItemDesc itemDesc = itemService.findItemDescById(itemId);
		return SysResult.success(itemDesc);
	}

2.6.4 編輯ItemService

@Override
	public ItemDesc findItemDescById(Long itemId) {

		return itemDescMapper.selectById(itemId);
	}

2.6.5 頁面效果展現

在這里插入圖片描述

2.7 重構商品修改

2.7.1 編輯ItemDescController

@RequestMapping("/update")
	public SysResult updateItem(Item item,ItemDesc itemDesc){

		itemService.updateItem(item,itemDesc);
		return SysResult.success();
	}

2.7.2 編輯ItemDescService

@Transactional
	@Override
	public void updateItem(Item item, ItemDesc itemDesc) {

		//更新時間由程式自動填充....
		itemMapper.updateById(item);

		itemDesc.setItemId(item.getId());
		itemDescMapper.updateById(itemDesc);
	}

2.8 重構商品洗掉

@Transactional
	@Override
	public void deleteItems(Long[] ids) {
		//1.將陣列轉化為集合
		List<Long> longList = Arrays.asList(ids);
		itemMapper.deleteBatchIds(longList);
		//2.洗掉商品詳情資訊
		itemDescMapper.deleteBatchIds(longList);
	}

3. 檔案上傳

3.1 檔案上傳入門案例

3.1.1 頁面分析

<form action="http://localhost:8091/file" method="post" 
	enctype="multipart/form-data">
		<input name="fileImage" type="file" />
		<input type="submit" value="提交"/>
	</form>

3.1.2 編輯FileController

package com.jt.controller;

import org.springframework.http.codec.multipart.FormFieldPart;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

@RestController
public class FileController {

    /**
     * 檔案上傳的入門案例
     * url:http://localhost:8091/file
     * 引數: fileImage 名稱
     * 回傳值:  檔案上傳成功!!!
     * SpringMVC 提供了工具API 專門操作流檔案.
     *
     * 檔案上傳的具體步驟:
     *  1.準備檔案目錄
     *  2.準備檔案的全名   xxxx.jpg
     *  3.準備檔案上傳的路徑  D:/JT-SOFT/images/xxxx.jpg
     *  4.將位元組資訊輸出即可.
     *  大小不要超過1M
     */
    @RequestMapping("/file")
    public String file(MultipartFile fileImage) throws IOException {

        String dirPath = "D:/JT-SOFT/images";
        File dirFile = new File(dirPath);
        if(!dirFile.exists()){
            dirFile.mkdirs();   //一勞永逸的寫法
        }
        //獲取檔案的名稱
        String fileName = fileImage.getOriginalFilename();
        //獲取檔案全路徑
        String filePath = dirPath + "/" + fileName;
        File file = new File(filePath);
        fileImage.transferTo(file); //將位元組資訊輸出到指定的位置中

        return "檔案上傳成功!!!!";
    }




}

3.2 商品檔案上傳實作

3.2.1 頁面分析

在這里插入圖片描述

3.2.2 準備ImageVO物件

package com.jt.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class ImageVO {

    //{"error":0,"url":"圖片的保存路徑","width":圖片的寬度,"height":圖片的高度}
    private Integer error;  //錯誤資訊   0程式運行正常    1.檔案上傳有誤.
    private String url;     //圖片訪問的虛擬路徑
    private Integer width;  // >0
    private Integer height; // >0

    //設定上傳失敗的方法
    public static ImageVO fail(){

        return new ImageVO(1,null,null,null);
    }

    public static ImageVO success(String url,Integer width,Integer height){

        return new ImageVO(0,url,width,height);
    }
}

3.2.3 編輯FileController

 /**
     * 實作檔案上傳
     * url地址: http://localhost:8091/pic/upload?dir=image
     * 引數:    uploadFile: 檔案的位元組資訊.
     * 回傳值:  {"error":0,"url":"圖片的保存路徑","width":圖片的寬度,"height":圖片的高度}
     *          ImageVO物件...
     */
    @RequestMapping("/pic/upload")
    public ImageVO upload(MultipartFile uploadFile){

        return fileService.upload(uploadFile);
    }

3.2.4 編輯FileService

package com.jt.service;

import com.jt.vo.ImageVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService{

    private String rootDirPath = "D:/JT-SOFT/images";

    //1.2 準備圖片的集合  包含了所有的圖片型別.
    private static Set<String> imageTypeSet;
    static {
        imageTypeSet = new HashSet<>();
        imageTypeSet.add(".jpg");
        imageTypeSet.add(".png");
        imageTypeSet.add(".gif");
    }


    /**
     * 完善的校驗的程序
     * 1. 校驗是否為圖片
     * 2. 校驗是否為惡意程式
     * 3. 防止檔案數量太多,分目錄存盤.
     * 4. 防止檔案重名
     * 5. 實作檔案上傳.
     * @param uploadFile
     * @return
     */
    @Override
    public ImageVO upload(MultipartFile uploadFile) {
        //1.校驗圖片型別  jpg|png|gif..JPG|PNG....
        //1.1 獲取當前圖片的名稱 之后截取其中的型別.   abc.jpg
        String fileName = uploadFile.getOriginalFilename();
        int index = fileName.lastIndexOf(".");
        String fileType = fileName.substring(index);
        //將資料轉化為小寫
        fileType = fileType.toLowerCase();
        //1.3 判斷圖片型別是否正確.
        if(!imageTypeSet.contains(fileType)){
            //圖片型別不匹配
            return ImageVO.fail();
        }

        //2.校驗是否為惡意程式 根據寬度/高度進行判斷
        try {
            //2.1 利用工具API物件 讀取位元組資訊.獲取圖片物件型別
            BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());
            //2.2 校驗是否有寬度和高度
            int width = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();
            if(width==0 || height==0){
                return ImageVO.fail();
            }

            //3.分目錄存盤  yyyy/MM/dd 分隔
            //3.1 將時間按照指定的格式要求 轉化為字串.
            String dateDir = new SimpleDateFormat("/yyyy/MM/dd/")
                             .format(new Date());
            //3.2 拼接檔案存盤的目錄物件
            String fileDirPath = rootDirPath + dateDir;
            File dirFile = new File(fileDirPath);
            //3.3 動態創建目錄
            if(!dirFile.exists()){
                dirFile.mkdirs();
            }

            //4.防止檔案重名  uuid.jpg 動態拼接
            //4.1 動態生成uuid  實作檔案名稱拼接  名.后綴
            String uuid =
                    UUID.randomUUID().toString().replace("-", "");
            String realFileName = uuid + fileType;

            //5 實作檔案上傳
            //5.1 拼接檔案真實路徑 dir/檔案名稱.
            String realFilePath = fileDirPath + realFileName;
            //5.2 封裝物件  實作上傳
            File realFile = new File(realFilePath);
            uploadFile.transferTo(realFile);

            //實作檔案上傳成功!!!!
            String url = "https://img14.360buyimg.com/n0/jfs/t1/45882/22/7027/53284/5d49358aE9c25c1bd/fb7365463f6a1a7b.jpg";
            return ImageVO.success(url,width,height);
        } catch (IOException e) {
            e.printStackTrace();
            return ImageVO.fail();
        }
    }
}

3.2.5 頁面效果展現

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/143182.html

標籤:區塊鏈

上一篇:字串-AC自動機(詳細圖解)

下一篇:可持久化線段樹(主席樹) --演算法競賽專題決議(27)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more