Slog47_支配vue框架初阶项目之博客网站-单页-服务端接收客户端发来的图片

news/2024/4/27 14:28:30/文章来源:https://blog.csdn.net/weixin_34015860/article/details/88749713
  • ArthurSlog
  • SLog-47
  • Year·1
  • Guangzhou·China
  • Aug 24th 2018

  • GitHub
  • 掘金主页
  • 简书主页
  • segmentfault

房价太高了大部分人买不起怎么?降房价;工资太低了怎么办?提工资;区分人才和蠢材,回答这两个问题就够了


开发环境MacOS(High Sierra 10.13.5)

需要的信息和信息源:

  • HTTP概述
  • HTTP
  • 互联网是如何工作的
  • 万维网是如何工作的
  • 统一资源定位符(URL)
  • 什么是超链接
  • 创建超链接
  • AJAX是异步的JavaScript和XML(Asynchronous JavaScript And XML
  • XMLHttpRequest
  • Using files from web applications

开始编码

  • 本篇实现 服务端对图片的接收
  • 上一篇文章,已经完成了客户端部分,html文件 和 js文件都已经完成了;服务端只是做了一个功能来检测客户端是否传来信息
  • 这一篇文章,我们来完成服务端对客户端传过来的图片的接收功能

server/index.js

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const router = new Router();// $ GET /package.json
app.use(serve('../client'));//
router.get('/signin', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password};var addSql = 'SELECT * FROM ArthurSlogAccount WHERE AccountName=?';var addSqlParams = [response.name];var datas = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[SELECT ERROR] - ', err.message);return;}if (result[0].Password == response.password) {resolve(result[0]);console.log('Welcome~ SingIn Successul ^_^' + '\\' + 'Level: ' + result[0].Level + ' Houses: ' + result[0].Houses);}if (result[0].Password != response.password) {reject('SingIn Fault ^_^!');console.log('SingIn Fault ^_^!');}});});if (datas) {ctx.body = datas;}connection.end();
});//
router.get('/signup', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password,"firstname": ctx.query.firstname,"lastname": ctx.query.lastname,"birthday": ctx.query.birthday,"sex": ctx.query.sex,"age": ctx.query.age,"wechart": ctx.query.wechart,"qq": ctx.query.qq,"email": ctx.query.email,"contury": ctx.query.contury,"address": ctx.query.address,"phone": ctx.query.phone,"websize": ctx.query.websize,"github": ctx.query.github,"bio": ctx.query.bio};var addSql = 'INSERT INTO ArthurSlogAccount(AccountName, Password, Firstname, Lastname, Birthday, Sex, Age, Wechart, Qq, Email, Contury, Address, Phone, Websize, Github, Bio) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';var addSqlParams = [response.name, response.password, response.firstname, response.lastname, response.birthday, response.sex, response.age, response.wechart, response.qq, response.email, response.contury, response.address, response.phone, response.websize, response.github, response.bio];ctx.body = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[INSERT ERROR] - ', err.message);return;}resolve('Singup Successful!');});});connection.end();
});router.post('/uploadfiles', async (ctx) => {console.log('客户端与服务端的 uploadfiles函数 已关联');});app.use(router.routes());app.listen(3000);console.log('listening on port 3000');

server/index.js

router.post('/uploadfiles', async (ctx) => {console.log('客户端与服务端的 uploadfiles函数 已关联');});
  • 上面的是上一篇更新的代码,我们把上次更新的部分在更新一次

server/index.js

router.post('/uploadfiles', koaBody({multipart: true}), async (ctx) => {console.log('fields: ', ctx.request.fields);console.log('files: ', ctx.request.files);const file = ctx.request.files.myFile;const reader = fs.createReadStream(file.path);const stream = fs.createWriteStream('ArthurSlog_icon' + '.jpg');reader.pipe(stream);
});
  • 同时,因为我们使用了系统IO(input/output)功能、还有对POST数据的解析功能(POST相当于是一些二进制数据,需要根据POST协议进行翻译成字符信息),所以我们需要引用这些功能的代码集:
  1. 首先,我们需要接收数据,并写入到服务器本地,所以需要引用关于IO的代码集,在nodejs语言中,这个代码集是 ‘fs’,所以在 js文件 里,需要写上 const fs = require("fs");
  2. 再次,我们需要对POST数据进行解析,通过google,在npm里找到koa-body这个代码集,可以用来解析POST数据,所以我们引入koa-body,即:const koaBody = require('koa-body');
  3. 因为 koa-body 是第三方代码集,没有包含在nodejs执行文件里,所以,我们需要切换至 server文件夹路径下,然后使用npm安装 koa-body
cd server

sudo npm install koa-body

  • 更新好的 js文件如下:

server/index.js

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const router = new Router();
const fs = require("fs");
const koaBody = require('koa-body');// $ GET /package.json
app.use(serve('../client'));//
router.get('/signin', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password};var addSql = 'SELECT * FROM ArthurSlogAccount WHERE AccountName=?';var addSqlParams = [response.name];var datas = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[SELECT ERROR] - ', err.message);return;}if (result[0].Password == response.password) {resolve(result[0]);console.log('Welcome~ SingIn Successul ^_^' + '\\' + 'Level: ' + result[0].Level + ' Houses: ' + result[0].Houses);}if (result[0].Password != response.password) {reject('SingIn Fault ^_^!');console.log('SingIn Fault ^_^!');}});});if (datas) {ctx.body = datas;}connection.end();
});//
router.get('/signup', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password,"firstname": ctx.query.firstname,"lastname": ctx.query.lastname,"birthday": ctx.query.birthday,"sex": ctx.query.sex,"age": ctx.query.age,"wechart": ctx.query.wechart,"qq": ctx.query.qq,"email": ctx.query.email,"contury": ctx.query.contury,"address": ctx.query.address,"phone": ctx.query.phone,"websize": ctx.query.websize,"github": ctx.query.github,"bio": ctx.query.bio};var addSql = 'INSERT INTO ArthurSlogAccount(AccountName, Password, Firstname, Lastname, Birthday, Sex, Age, Wechart, Qq, Email, Contury, Address, Phone, Websize, Github, Bio) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';var addSqlParams = [response.name, response.password, response.firstname, response.lastname, response.birthday, response.sex, response.age, response.wechart, response.qq, response.email, response.contury, response.address, response.phone, response.websize, response.github, response.bio];ctx.body = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[INSERT ERROR] - ', err.message);return;}resolve('Singup Successful!');});});connection.end();
});router.post('/uploadfiles', koaBody({multipart: true}), async (ctx) => {console.log('fields: ', ctx.request.fields);console.log('files: ', ctx.request.files);const file = ctx.request.files.myFile;const reader = fs.createReadStream(file.path);const stream = fs.createWriteStream('ArthurSlog_icon' + '.jpg');reader.pipe(stream);
});app.use(router.routes());app.listen(3000);console.log('listening on port 3000');
  • 现在,打开浏览器,输入 127.0.0.1:3000/app.html,点击 signin 按钮
  • 输入账号:ArthurSlog 密码:ArthurSlog,点击登陆
  • 成功登陆之后,点击 “选择文件” 按钮,选择一张你电脑里的图片,然后点击“打开”
  • 再点击 uploadfiles 按钮,观察 服务端终端,如果服务端正常接收了客户端传过来的图片,那么早服务端终端上会打印出接收到的文件的详细信息
  • 切换至 server文件夹 路径下,会看到接收到的图片文件,并依照代码命名为 “ArthurSlog_icon.jpg”
  • 至此,我们完成了服务端对客户端传送来的图片的接收和保存。

欢迎关注我的微信公众号 ArthurSlog

ArthurSlog

如果你喜欢我的文章 欢迎点赞 留言

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_765994.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[leetcode 双周赛 6] 1152 用户网站访问行为分析

目录 1152 Analyze User Website Visit Pattern 用户网站访问行为分析描述思路代码实现1152 Analyze User Website Visit Pattern 用户网站访问行为分析 描述 为了评估某网站的用户转化率,我们需要对用户的访问行为进行分析,并建立用户行为模型。日志文件…

shopify网站转化率优化之结账页checkout优化

昨天分享了“利用GOOGLE地图API实现shopify结账页checkout地址自动填写地址字段”是个非常屌的功能,但shopify默认的结账页checkout是这样的如图 [caption id"" align"alignnone" width"1920"] shopify默认结账页电脑版[/caption] 上…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

php支持redis扩展,php支持redis扩展-php各扩展插件-互劦cms 官方网站-内容管理系统...

1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本。2.解压缩后,将php_redis.dll和php_redis.pdb拷贝至php的ext目录下3.修改php.ini,(PS:此php.ini文件是在Apache目录)在该文件中加入:; php_redisextension…

eclipse-cdt添加文件注释_给网站任何页面添加强大的社交分享按钮(含Shopify操作教程)...

由于Shopify的主题的分享按钮可分享的社交平台比较少,所以我就从网上找了一个功能超级强大的集社交分享与关注的Share this分享按钮,他支持49种按钮分享,关注社交平台按钮,点赞按钮等等,网站地址是:https:/…

嘉缘人才网管理系统php,asp 嘉缘人才网站内容管理系统终结版 v7.0

《嘉缘人才内容管理系统》基于Win32平台,采用ASPMSSQL 2000运行环境。其安装简单方便,只需将程序上传至服务器后即可使用;强大的企业招聘、个人求职、新闻资讯、高级人才、兼职人才、留言反馈、及强大的在线支付与自定义标签等功能&#xff0…

wordpress wpdb-update 能获取更新的id嘛?_外贸建站基础课程—wordpress

说到 WordPress 相信很多同学都会知道这是一个能够搭建外贸网站的开发平台。但是在具体的概念理解和实际操作上或多或少的存在一些偏差。今天我们就来系统的讲解一下wordpress究竟是什么样的魅力能够让建站人员对它如此着迷。一.Wordpress是什么?WordPress是一个以P…

几十万的词如何用每页500词分页展示_SEO优化分享_如何提升网站收录_网站SEO三要素的注意点...

SEO优化大师课程教你如何提升网站收录以及网站SEO三要素的注意点。今天给你们免费分享SEO优化大师地课程,包含了如何提升网站收录和网站SEO三要素的注意点。想要了解更多SEO优化内容,欢迎来咨询。如何提升网站收录:保持规律的更新&#xff0c…

开启访问控制_Ping32网站访问控制使用教程

通过网站访问控制功能,可以对终端用户访问网站进行管控,可以设置网站访问黑白名单,只允许用户访问某些网站或禁止访问某些网站;支持设置网页关键词,涉及到关键词的网页禁止打开。选择网络管理分组,点击网站…

seo按天扣费系统_seo计费系统,seo按天计费系统使用介绍

常规优化关键词查找繁琐,SEO工作量大,优化时间较慢,用户查询不能自主操作,自主查询加词,没有良好的用户体验。试想一个客户本来可以优化10个词的,但是客户不知道都想优化那些词,如何把单个客户的…

2021安徽高考成绩查询链接,2021年安徽高考成绩查询网站查分网址:https://www.ahzsks.cn/...

【导语】高考结束后大家最为关心的问题就是在哪里查分,如何查分,更三高考高考频道特别整理2021年安徽高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学!由于,…

服务器崩溃如何恢复网站数据库,数据库服务器崩了如何恢复

数据库服务器崩了如何恢复 内容精选换一换本文以Linux操作系统为例,介绍如何将已下载的副本集备份文件的数据恢复至自建数据库。关于如何下载备份文件,请参见下载备份文件。该方法仅适用于副本集实例。本地自建MongoDB数据库已安装3.4版本客户端工具。假…

java网站兼容性设置_Web测试兼容性

随时操作系统,浏览器越来越多样性,导致软件兼容性测试在目前软件测试领域占有很重要的地位,无论是B/S架构还是C/S架构的软件都需要进行兼容性测试,为了充分保证产品的平台无关性,使用户充分感受到软件的友好。Web兼容性…

奇奇seo优化软件_黑龙江seo优化排名软件

黑龙江sexaa0c1o优化排名软件,随着现代化信息技术的发展,人们越来越多的从网络来获取信息。近年来,我们获取的信息绝大部分都是来源于网络,网络如今已成为信息的最大载体。为了让更多消费者了解并消费企业提供的服务和产品&#x…

进服务器网站报错应用程序,IIS:应用程序池中的服务器错误、超时时间已到

网站前台现象:页面报错问题现象:在服务器日志有:【为应用程序池 提供服务的进程关闭时间超过了限制。进程 ID 是 7480。】提示的ID可以有很多,例如3844、8004、6124等数字。发现很多类似的问题,引发的根本原因未知&am…

jitter 如何优化网络_网络营销:企业如何通过站外优化做好网站的SEO优化呢?...

既然要了解SEO网站优化,那么除了站内优化外,还应该讲到站外优化。什么是站外优化呢?站外优化从字面意义上看,是优化网站以外的内容,做网站的外部优化。企业可以通过对官网进行站内优化,使自己的网站利于蜘蛛爬取;而站…

php 商城漏洞,爆PHPWeb成品网站超市最新注入漏洞

今天早上去乌云逛的时候,看到西部数码分站被爆注入,于是就关注了一下。然后到下午没想到就公开了,一看原来是phpweb成品网站超市。西部数码说是第三方就忽略了,蛋疼。你这忽略想我就想到,既然你们西部有那其他的网站也…

Dreamweaver CS6 新建站点

1、打开新建站点菜单 打开Dreamweaver CS6软件,在Dreamweaver CS6软件界面的导航上可以看到站点菜单栏。点击站点,然后选择弹出菜单上的新建站点子菜单。 2、添加服务器 点击左下角的“”图标添加解析的服务器。 开发网站的时候一般使用的是本地搭建的服…

python制作网页服务器_python网络编程学习--简易网站服务器制作

python 网络编程和其他语言都是一样的,服务器这块步骤为: 1. 创建套接字 2. 绑定地址 3. 监听该描述符的所有请求 4. 有新的请求到了调用accept处理请求 Python Web服务器网关接口(Python Web Server Gateway Interface,简称“WSGI”)&#x…

web服务器创建站点,Dreamweaver创建Web站点的六个步骤流程

对于一个SEO优化人员来说,虽然不要求对于网站建站有多么精通,但是还是必须要懂得一些使用建站工具的基本操作。在Dreamweaver中,Web站点可视为网站中所有文件的集合。我们可以在本地计算机上创建Web页,也可将Web页上传至Web服务器…