.net core mvc項(xiàng)目實(shí)現(xiàn)掃描圖書條形碼調(diào)用isbn接口獲取圖書信息

最近在學(xué)習(xí)C#編程享甸,做了個(gè)圖書管理系統(tǒng)的小demo箩绍,有個(gè)需求就是可以更加快速地將圖書入庫而不需要手動(dòng)輸入孔庭。因?yàn)閯倓傞_始學(xué)不熟悉 ,最后功能實(shí)現(xiàn)了材蛛,實(shí)現(xiàn)過程可能不規(guī)范圆到。
效果圖:


t1.jpg
t2.jpg

下面開始說步驟:

1.前端代碼

//上傳條形碼
<form name="isbnform" method="post" onSubmit="return check();" >
     <div class="row" style="margin-bottom: 20px;margin-left: 185px">
         <input type="file" style="width: 500px" name="image"  />
         <input type="submit"  value="上傳"/><br />
  </div>
</form>
//將后臺(tái)處理的數(shù)據(jù)顯示在前端界面,并可以傳回?cái)?shù)據(jù)庫
<form method="post" enctype="multipart/form-data" asp-controller="Book" asp-action="Create">
        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="BookName" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="BookName" id="BookName">
                <span class="invalid" asp-validation-for="BookName"></span>
            </div>
        </div>

        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="ISBN" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="ISBN">
                <span class="invalid" asp-validation-for="ISBN"></span>
            </div>
        </div>
        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="Author" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="Author">
                <span class="invalid" asp-validation-for="Author"></span>
            </div>
        </div>
        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="Press" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="Press">
                <span class="invalid" asp-validation-for="Press"></span>
            </div>
        </div>

        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="PressDate" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="PressDate">
                <span class="invalid" asp-validation-for="PressDate"></span>
            </div>
        </div>

        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="Price" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="Price">
                <span class="invalid" asp-validation-for="Price"></span>
            </div>
        </div>

        <div class="form-group row" style="margin-bottom: 10px">
            <label asp-for="BookStock" class="col-sm-2" style="margin-top: 20px"></label>
            <div class="col-sm-10">
                <input class="form-control primary" asp-for="BookStock">
                <span class="invalid" asp-validation-for="BookStock"></span>
            </div>
        </div>

        <div class="form-group" style="margin-bottom: 10px">
            <label asp-for="Introduce" class="col-sm-2" style="margin-top: 20px"></label>
            <textarea class="form-control" rows="5" asp-for="Introduce"></textarea>

        </div>

        <div class="form-group" style="margin-bottom: 20px">
            <div style="position: relative;">
                <label>
                    Image
                    <a class="btn btn-primary" href="javascript:;">
                        選擇圖片
                        <input type="file" name="Image" size="40" accept="image/*"
                               style="position: absolute; z-index: 2; top: 0; left: 0; filter: alpha(opacity=0); opacity: 0; background-color: transparent; color: transparent"
                               onchange="preview(this)" />
                    </a>
                </label>

                <img style="width: 150px;" class="hidden preview img-thumbnail">
            </div>
        </div>

        <div class="invalid" asp-validation-summary="ModelOnly">
        </div>
        <button type="submit" class="btn btn-primary">提交</button>
        <a asp-action="Index" class="btn btn-secondary">返回列表</a>
    </form>

2.controller里對應(yīng)方法代碼

這里使用了Ding.QRCode.ZXing類庫將圖書的條形碼解析得到圖書的ISBN號(hào)卑吭,之后借助網(wǎng)上找的isbn接口獲取圖書信息芽淡。

Ding.QRCode.ZXing
ZXing.jpg
 [HttpPost]
        public IActionResult SearchISBN(string image)
        {

            //image = "G:/file/picture/" + image;
            Image img = Image.FromFile(image);
            Bitmap b = new Bitmap(img);

            //該類名稱為BarcodeReader,可以讀二維碼和條形碼
            var zzb = new ZXing.ZKWeb.BarcodeReader();
            zzb.Options = new DecodingOptions
            {
                CharacterSet = "UTF-8"
            };
            Result r = zzb.Decode(b);
            string resultText = r.Text;
            b.Dispose();
            img.Dispose();

            string serviceUrl = string.Format("{0}/{1}", "http://book.feelyou.top/isbn", resultText);
            //創(chuàng)建Web訪問對  象
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
            //通過Web訪問對象獲取響應(yīng)內(nèi)容
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            //通過響應(yīng)內(nèi)容流創(chuàng)建StreamReader對象,因?yàn)镾treamReader更高級(jí)更快
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問題就用這個(gè)方法
            string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
            
            reader.Close();
            myResponse.Close();
            //return returnXml;
            BookCreateViewModel book = new BookCreateViewModel();
            JObject obj = JObject.Parse(returnXml);
            book.BookName = obj["title"].ToString();
            book.ISBN = obj["isbn"].ToString();
            book.Introduce = obj["book_intro"].ToString();
            book.Author= obj["abstract"].ToString().Split('/')[0];
            book.Press= obj["abstract"].ToString().Split('/')[1];
            book.PressDate = Convert.ToDateTime(obj["abstract"].ToString().Split('/')[2]);
            string str = obj["abstract"].ToString().Split('/')[3];
            str = Regex.Replace(str, @"[^\d.\d]", "");
            if (Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$"))
            {
                decimal result = decimal.Parse(str);
                book.Price = result;
            }

            return View(book);
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豆赏,一起剝皮案震驚了整個(gè)濱河市挣菲,隨后出現(xiàn)的幾起案子富稻,更是在濱河造成了極大的恐慌,老刑警劉巖己单,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉窃,死亡現(xiàn)場離奇詭異,居然都是意外死亡纹笼,警方通過查閱死者的電腦和手機(jī)纹份,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廷痘,“玉大人蔓涧,你說我怎么就攤上這事∷穸睿” “怎么了元暴?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兄猩。 經(jīng)常有香客問我茉盏,道長,這世上最難降的妖魔是什么枢冤? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任鸠姨,我火速辦了婚禮,結(jié)果婚禮上淹真,老公的妹妹穿的比我還像新娘讶迁。我一直安慰自己,他們只是感情好核蘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布巍糯。 她就那樣靜靜地躺著,像睡著了一般客扎。 火紅的嫁衣襯著肌膚如雪祟峦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天徙鱼,我揣著相機(jī)與錄音搀愧,去河邊找鬼。 笑死疆偿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搓幌。 我是一名探鬼主播杆故,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溉愁!你這毒婦竟也來了处铛?” 一聲冷哼從身側(cè)響起饲趋,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撤蟆,沒想到半個(gè)月后奕塑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡家肯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年龄砰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨衣。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换棚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出反镇,到底是詐尸還是另有隱情固蚤,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布歹茶,位于F島的核電站夕玩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惊豺。R本人自食惡果不足惜燎孟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扮叨。 院中可真熱鬧缤弦,春花似錦、人聲如沸彻磁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衷蜓。三九已至累提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磁浇,已是汗流浹背斋陪。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留置吓,地道東北人无虚。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像衍锚,于是被迫代替她去往敵國和親友题。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容