记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息
书房信息初始化已完成,现在开始处理图书信息新增功能。
主要是实现之前New Razor Pages的后台部分。
新增需要保存的Model:Book.InitSpec.cs
/Models/Book.InitSpec.cs
- using System.Collections.Generic;
- namespace PTager.BL
- {
- public partial class Book
- {
- public class InitSpec
- {
- public string Title { get; set; }
- public string Subtitle { get; set; }
- public IEnumerable<string> Author { get; set; }
- public IEnumerable<string> Translator { get; set; }
- public string Isbn13 { get; set; }
- public string Isbn10 { get; set; }
- public string AuthorIntro { get; set; }
- public string Summary { get; set; }
- public string Publisher { get; set; }
- public string Binding { get; set; }
- public string OriginTitle { get; set; }
- public int Pages { get; set; }
- public string ImageUrl { get; set; }
- public string Pubdate { get; set; }
- public string Catalog { get; set; }
- public IEnumerable<string> Tags { get; set; }
- }
- }
- }
实现Post请求部分:
/Pages/Shelves/New.cshtml.cs
- namespace PTager.BL.WebUI.Pages.Shelves
- {
- using M = Book;
- public class NewModel : PageModel
- {
- private readonly IHostingEnvironment _env;
- private readonly string _savePath;
- private readonly string _relativePath;
- public NewModel(IHostingEnvironment env)
- {
- _env = env;
- _relativePath = Path.Combine("App_Data", "Images/Books", DateTime.Today.ToString("yyyy-MM-dd"));
- _savePath = Path.Combine(_env.ContentRootPath, _relativePath);
- }
- [BindProperty]
- public string IsbnNbr { get; set; }
- public DoubanBookModel DoubanBook { get; set; }
- public async Task OnGetAsync(string isbn){...//查看之前的博客}
- public async Task<IActionResult> OnPostAsync()
- {
- if (validIsbnNbr(IsbnNbr))
- {
- DoubanBook = await getDoubanBook();
- if (DoubanBook != null)
- {
- var extention = Path.GetExtension(DoubanBook.image);
- var fileName = Guid.NewGuid().ToString() + (string.IsNullOrEmpty(extention) ? ".jpeg" : extention);
- await saveImageAsync(fileName, DoubanBook.image);
- var spec = new M.InitSpec
- {
- Author = DoubanBook.author,
- AuthorIntro = DoubanBook.author_intro,
- Binding = DoubanBook.binding,
- Catalog = DoubanBook.catalog,
- ImageUrl = Path.Combine(_relativePath, fileName),
- Isbn10 = DoubanBook.isbn10,
- Isbn13 = DoubanBook.isbn13,
- OriginTitle = DoubanBook.origin_title,
- Pages = DoubanBook.pages,
- Pubdate = DoubanBook.pubdate,
- Publisher = DoubanBook.publisher,
- Subtitle = DoubanBook.subtitle,
- Summary = DoubanBook.summary,
- Tags = DoubanBook.tags.Select(x => x.name),
- Title = DoubanBook.title,
- Translator = DoubanBook.translator
- };
- }
- }
- return Page();
- }
- private async Task saveImageAsync(string fileName, string url)
- {
- using (var httpClient = new HttpClient())
- {
- var responseStream = await httpClient.GetStreamAsync(url);
- var savePath = Path.Combine(_savePath, fileName);
- var stream = new FileStream(savePath, FileMode.Create);
- byte[] bArr = new byte[];
- int size = responseStream.Read(bArr, , bArr.Length);
- while (size > )
- {
- stream.Write(bArr, , size);
- size = responseStream.Read(bArr, , bArr.Length);
- }
- stream.Close();
- responseStream.Close();
- }
- }
- private async Task<DoubanBookModel> getDoubanBook(){...//查看之前的博客}
- public async Task<string> HttpGetAsync(string url, Encoding encoding = null){...//查看之前的博客}
- private bool validIsbnNbr(string isbn){...//查看之前的博客}
- }
- }
新增IBookRepo和BookRepo:
/Repos/IBookRepo.cs
- using System.Threading.Tasks;
- namespace PTager.BL
- {
- using M = Book;
- public interface IBookRepo
- {
- Task InitAsync(M.InitSpec spec);
- }
- }
/Repos/BookRepo.cs
- using System.Threading.Tasks;
- using PTager.BL.Data.Store;
- namespace PTager.BL.Data.Repos
- {
- using M = Book;
- public class BookRepo : RepoBase, IBookRepo
- {
- public BookRepo(BLDbContext context) : base(context)
- {
- }
- public async Task InitAsync(M.InitSpec spec)
- => await _context.Book_Init(spec.ToJson());
- }
- }
/Store/BLDbContext.cs
- public async Task Book_Init(string json)
- => await this.ExecuteMethodCallAsync(nameof(Book_Init), args: json);
记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息的更多相关文章
- 记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息
昨晚完成了Web端新增图书信息的功能,现在就差DB的具体实现了. 因为我把Book相关的信息拆分的比较多,所以更新有点小麻烦. 首先,我需要创建一个Book Type的Matter: 然后,将图片路径 ...
- 记开发个人图书收藏清单小程序开发(三)DB设计
主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...
- 记开发个人图书收藏清单小程序开发(五)Web开发
决定先开发Web端试试. 新增Web应用: 选择ASP.NET Core Web Application,填写好Name和Location,然后点击OK. 注意红框标出来的,基于.NET Core 2 ...
- 记开发个人图书收藏清单小程序开发(六)Web开发
Web页面开发暂时是没有问题了,现在开始接上Ptager.BL的DB部分. 首先需要初始化用户和书房信息.因为还没有给其他多余的设计,所以暂时只有个人昵称和书房名称. 添加 Init Razor Pa ...
- 记开发个人图书收藏清单小程序开发(四)DB设计
早上起来,又改动了一下: 主要是,将非常用信息全部拆分出来,让Table尽量的小,小到不能继续拆分了,这样区分DB逻辑.增加了FileBank存储Book的封面图片,统一管理图片资源. 新添加的Typ ...
- 记开发个人图书收藏清单小程序开发(七)DB设计
前面的书房初始化的前端信息已经完善,所以现在开始实现DB的Script部分. 新增Action:Shelf_Init.sql svc.sql CREATE SCHEMA [svc] AUTHORIZA ...
- 微信小程序开发系列一:微信小程序的申请和开发环境的搭建
我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...
- 微信小程序开发系列五:微信小程序中如何响应用户输入事件
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 微信小程序开发系列七:微信小程序的页面跳转
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
随机推荐
- Hive常见问题汇总
参考资料: Hive常见问题汇总 啟動hive出錯,提示沒有權限 2015年04月02日 09:58:49 阅读数:31769 这里小编汇集,使用Hive时遇到的常见问题. 1,执行#hive命令进入 ...
- tensorflow-windows下安装,python3.6
安装: pip install tensorflow ps:我第一次安装了,但是导入却失败了. 进入\python3\Lib\site-packages\删除了tensorflow,再次pip ins ...
- 2个版本并存的python使用新的版本安装django的方法
2个版本并存的python使用新的版本安装django的方法 默认是使用 pip install django 最新版的django会提示 要求python版本3.4以上,系统默认的版本是2.7.5 ...
- 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree
▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...
- XE7 数据库独立运行需要的文件
dbxase.dlldbxmss.dlldbxmss9.dlllibeay32.dllmidas.dllMSVCR100.DLL sqlncli10.dllssleay32.dll
- 可视化库-Matplotlib-散点图(第四天)
1. 画基本的散点图 plt.scatterdata[:, 0], data[:, 1], marker='o', color='r', label='class1', alpha=0.4) np.r ...
- 跟我学算法- tensorflow 卷积神经网络训练验证码
使用captcha.image.Image 生成随机验证码,随机生成的验证码为0到9的数字,验证码有4位数字组成,这是一个自己生成验证码,自己不断训练的模型 使用三层卷积层,三层池化层,二层全连接层来 ...
- AOP术语
1.连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前,类初始化后,类某个方法调用前,调用后,方法跑出异常后.一个类或一段程序代码拥有一些具有边界性质的特定点.这些代码中的特定点就 ...
- maven的pom报plugins缺失的解决方法
maven的pom报plugins却是的解决方法. 引用 Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom: ...
- nodejs API(二)
官网所在位置:https://nodejs.org/dist/latest-v6.x/docs/api/querystring.html querystring.escape(str) 转义 qu ...