腾讯云图片鉴黄集成到C#

 

官方文档:https://cloud.tencent.com/document/product/641/12422

请求官方API及签名的生成代码如下:

    public class TencentCloundPicHelper
    {
        /// <summary>
        /// 发送Post请求腾讯云
        /// </summary>
        public string SendPost(string postDataStr)
        {
            var url = @"http://service.image.myqcloud.com/detection/porn_detect";

            try
            {
                System.Net.ServicePointManager.Expect100Continue = false;
                var request = (HttpWebRequest)HttpWebRequest.Create(url);

                request.Method = "POST";

                SetHeaderValue(request.Headers, "content-type", "application/json");
                SetHeaderValue(request.Headers, "content-length", postDataStr.Length.ToString());
                SetHeaderValue(request.Headers, "Host", "service.image.myqcloud.com");
                SetHeaderValue(request.Headers, "authorization", GetSign());
                var memStream = new MemoryStream();

                var jsonByte = Encoding.GetEncoding("utf-8").GetBytes(postDataStr);
                memStream.Write(jsonByte, 0, jsonByte.Length);

                request.ContentLength = memStream.Length;
                var requestStream = request.GetRequestStream();
                memStream.Position = 0;
                var tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();

                requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                requestStream.Close();

                var response = request.GetResponse();
                using (var s = response.GetResponseStream())
                {
                    var reader = new StreamReader(s, Encoding.UTF8);
                    return reader.ReadToEnd();
                }
            }
            catch (WebException we)
            {
                if (we.Status == WebExceptionStatus.ProtocolError)
                {
                    using (var s = we.Response.GetResponseStream())
                    {
                        var reader = new StreamReader(s, Encoding.UTF8);
                        return reader.ReadToEnd();
                    }
                }
                else
                {
                    throw we;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 获取签名
        /// </summary>
        public static string GetSign()
        {
            var appId = ConfigurationManager.AppSettings["AppId"];//开发者的 APPID,接入智能图像时由系统生成
            var bucket = "tengxunyun";//Bucket,空间名称,即图片资源的组织管理单元
            var secretId = ConfigurationManager.AppSettings["SecretId"];//Secret ID
            var secretKey = ConfigurationManager.AppSettings["SecretKey"];//secretKey
            var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            var currentTime = Convert.ToInt64(ts.TotalSeconds);//当前时间戳,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒,多次签名时,e 应大于 t
            var expiredTime = Convert.ToInt64((DateTime.UtcNow.AddMinutes(180) - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);//签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;单次签名时,e 必须设置为 0
            var rand = GetRandom();//随机串,无符号 10 进制整数,用户需自行生成,最长 10 位
            var userid = 0;//历史遗留字段,请填写为 0
            var fileid = "";//资源存储的唯一标识,单次签名必填;多次签名选填,如填写则会验证与当前操作的文件路径是否一致。
            var encryptText = $"a={appId}&b={bucket}&k={secretId}&e={expiredTime}&t={currentTime}&r={rand}&u=0&f=";
            var sign = Hmacsha1Encrypt(encryptText, secretKey);

            return sign;
        }

        /// <summary>
        /// 设置Http post请求头
        /// </summary>
        public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
        {
            var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
            if (property != null)
            {
                var collection = property.GetValue(header, null) as NameValueCollection;
                collection[name] = value;
            }
        }

        /// <summary>
        /// HMACSHA1算法加密
        /// </summary>
        private static string Hmacsha1Encrypt(string encryptText, string encryptKey)
        {
            using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(encryptKey)))
            {
                var hash = mac.ComputeHash(Encoding.UTF8.GetBytes(encryptText));
                var pText = Encoding.UTF8.GetBytes(encryptText);
                var all = new byte[hash.Length + pText.Length];
                Array.Copy(hash, 0, all, 0, hash.Length);
                Array.Copy(pText, 0, all, hash.Length, pText.Length);
                return Convert.ToBase64String(all);
            }
        }

        /// <summary>
        /// 获取随机数
        /// </summary>
        private static int GetRandom()
        {
            var random = new Random();
            var rand = random.Next(10000, 999999999);
            return rand;
        }
    }

SQL Server 怎么在分页获取数据的同时获取到总记录数

 

SQL Server 获取数据的总记录数,有两种方式:

1.先分页获取数据,然后再查询一遍数据库获取到总数量

2.使用count(1) over()获取总记录数量

SELECT
    *
FROM
    (
    SELECT
        ROW_NUMBER() OVER(ORDER BY Id DESC) rn,
        COUNT(1) OVER() AS TotalCount,
        Id
    FROM
        dbo.T_User
    )a
WHERE
    a.rn BETWEEN 1 AND 5

第二种方式既分页还能获取到总记录数量。就是多一个字段,如果获取一次数据较多的话,会浪费一些流量。

如果使用第一种的话,会多访问一次数据库,增加一次数据连接的关闭和打开,会消耗数据库资源。

第二种方式还是我同事开始使用的,然后我们就这样使用了。

注意:目前发现只有sqlserver有,mysql没有这个效果,大家如果发现其他的可以使用,可以评论。3Q.

sqlserver 操作数据表语句模板

 

从网上搜的,一点一点加吧。

-----------设置事务全部回滚-----------------
SET XACT_ABORT ON

BEGIN
BEGIN  TRY
    BEGIN TRANSACTION TR

---------------------------------删除表=======================
--DROP TABLE T_QuestionBankItem

---=================================修改列名========================================
--exec sp_rename 'T_MyCourse.CourseClassId' , 'ClassId', 'column'

-----==========================修改字段类型及默认值------------------

--ALTER TABLE T_Message ALTER COLUMN Title nvarchar(20) NOT NULL

--===========================增加列======================================----

----------------T_AssNews-------------
--alter table T_AssNews ADD ViewCount int NOT NULL Default 0
--EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'浏览量' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'T_AssNews', @level2type=N'COLUMN',@level2name=N'ViewCount'

-----------删除字段、先删除约束
--ALTER TABLE [dbo].[T_TICategory] DROP CONSTRAINT [DF_T_TICategory_TrainingInstitutionId]
--ALTER TABLE T_TICategory DROP COLUMN TrainingInstitutionId

     COMMIT TRANSACTION TR
     END TRY

     BEGIN CATCH
        PRINT 'EXECUTED FAILED';

        select error_number() as error_number ,
             error_message() as error_message
        ROLLBACK TRANSACTION TR
        RETURN
    END CATCH
END

.NET MVC后台发送post请求

 

一、WebRequest方式

  

//设置请求接口
var request = (HttpWebRequest)WebRequest.Create("http://xxx.com/xxx");
//请求参数
var postData = string.Format("appId={0}&appScreat={1}&channel={2}", appId, appScreat, channel);
var data = Encoding.ASCII.GetBytes(postData);
//请求方式
request.Method = "POST";
//请求头参数设置
request.Headers.Add("sign", sign);
request.Headers.Add("timestamp", timestamp);
request.Headers.Add("token", token);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
//结果返回
var response = (HttpWebResponse)request.GetResponse();
//转字符串
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
//转换为json对象
MXCZUserInfoResponse userInfoResponse = JsonConvert.DeserializeObject<MXCZUserInfoResponse>(responseString);
 
 
 
 

百度api查询多个地址的经纬度的问题

 

  在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬同事(我是一只前端弱鸡),给我提供的思路,在百度api的回调函数里面再调一次自定义的回调函数,从而在自定义的函数里面进行判断所有地点是否都回调完成了。

  下面是具体代码,  

 1 <script>
 2         //所有待查询经纬度的地点
 3         var allAddress=new Array("北京西站","成都东站","上海南站","西安北站");
 4         //回调前计数用
 5         var callbackBefore = 0;
 6         //回调后计数用
 7         var callbackAfter = 0;
 8         //存放经纬度
 9         var geoCoord={};
10         //循环所有地址
11         for (var i = 0; i < allAddress.length; i++) {
12             //先判断是否已经查询了经纬度(排重)
13             if (!(allAddress[i] in geoCoord)) {
14                 //去调百度api,查经纬度了,先记个数
15                 callbackBefore++;
16                 GetPoint(allAddress[i], function (address, point) {
17                     //回调回来了,经纬度,再记个数
18                     callbackAfter++;
19                     geoCoord[address] = point;
20                     //判断回调之前的数目和回调之后的数目是否一样,一样就表示所有地址都查询完了
21                     if (callbackBefore == callbackAfter) {
22                         //去做你想做的操作了吧
23                         //Travel(geoCoord);
24                         return;
25                     }
26                 });
27             }
28
29         }
30         //查询经纬度的函数
31         function GetPoint(address, callback) {
32             var local = new BMap.LocalSearch(address,
33             {
34                 //智能搜索,这本来就是一个回调的方法
35                 "onSearchComplete": function (obj) {
36                     //存放经纬度
37                     var point = [];
38                     if (obj && obj.getPoi(0)) {
39                         var pp = obj.getPoi(0).point;
40                         point.push(pp.lng);
41                         point.push(pp.lat);
42                         //回调方法
43                         callback(address, point);
44                     }
45                 }
46             });
47             local.search(address);
48         }
49 </script>

  我实际情况是那个地址allAddress比较复杂,需要二次循环,不像上面例子这么简单,所以才使用的这种方法。

try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?

 

  这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后,

看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的,还有return中间执行的。遂做了一个小测试如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
 {
      //测试
     Test();
     System.Console.WriteLine("结束了");
     System.Console.ReadLine();
 }
 
 /// <summary>
 /// 测试
 /// </summary>
 /// <returns></returns>
 private static int Test()
 {
     try
     {
         System.Console.WriteLine("好,开始了");
         return ReturnInt();
     }
     catch (Exception exception)
     {
         System.Console.WriteLine("我是异常");
         throw;
     }
     finally
     {
         System.Console.WriteLine("我是finally");
     }
 }
 
/// <summary>
/// 返回数字
/// </summary>
/// <returns></returns>
 private static int ReturnInt()
 {
     System.Console.WriteLine("我是return");
     return 1;
 }

  测试结果如下:

  

  所以我觉得finally{}里面的code是在return之后执行的。

  此测试较粗糙,如有其它方法证明,望告知。

----------------------------------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------------------------------------------------------------------------------

  之前的测试果然很粗糙,搞错了一个概念,return到底是在什么时候才算执行,什么时候执行完。上面打印“我是return”的时候,我以为是return执行完了,其实那个时候只是去准备return的返回值去了,并没有真正的返回“1”并跳出Test()方法,准备好返回值之后,接着去执行finally{}里面的code,打印了“我是finally”,最后Test()方法才算执行完,并真正的返回(return)“1”到main里面。

按照@以后会觉得昵称很幼稚 老哥的提醒,修改了一下main()里面的代码,

1
2
3
4
5
6
7
static void Main(string[] args)
{
    //测试
    Console.WriteLine("Test结果:" + Test());
    System.Console.WriteLine("结束了");
    System.Console.ReadLine();
}

  结果如下:

  

  所以finally{}里面的code应该是在return之前执行的。

  在http://bbs.csdn.net/topics/60474475 此贴中,五楼的老哥的话,“函数应该是栈调用,如果先执行return ,哪不是退到上个栈了,怎么调用finally, 所以我觉得先调用finally”,

  在http://blog.csdn.net/gaoyuanfeng/article/details/4064388 文章中,finally与return的关系也讲得很明白了,这一天天的真是受教了。

js获取某个日期所在周周一的日期

 

第一次写,做个小笔记。

第一步:获取该日期的星期数;

第二步:在该日期上减去他的星期数再减1,(注:星期日获取到的星期数是0);

下面是具体代码:

1
2
3
4
5
6
7
8
9
function GetMonday(dd) {
    var week = dd.getDay(); //获取时间的星期数
    var minus = week ? week - 1 : 6;
    dd.setDate(dd.getDate() - minus); //获取minus天前的日期
    var y = dd.getFullYear();
    var m = dd.getMonth() + 1; //获取月份
    var d = dd.getDate();
    return y + "-" + m + "-" + d;
}

  

腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期的更多相关文章

  1. 百度api查询多个地址的经纬度的问题

    在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...

  2. 腾讯云图片鉴黄集成到C#

    官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: var urlList = new List& ...

  3. .NET MVC后台发送post请求

    一.WebRequest方式 //设置请求接口 var request = (HttpWebRequest)WebRequest.Create("http://xxx.com/xxx&quo ...

  4. EF 数据库连接字符串-集成安全性访问 SQL Server

    使用 Windows 集成安全性访问 SQL Server 如果您的应用程序运行在基于 Windows 的 Intranet 上,则也许可以将 Windows 集成身份验证用于数据库访问.集成安全性使 ...

  5. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  6. 后台发送http请求通用方法,包括get和post

    package com.examsafety.service.sh; import java.io.BufferedReader; import java.io.IOException; import ...

  7. myBatis框架_关于怎么获得多表查询的总记录数

    <!-- 查找总记录数 --> <select id="billCount" resultType="int"> select coun ...

  8. 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集

    使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...

  9. MYSQL使用group by,如何查询出总记录数

    比如有这样一条SQL,根据t.user_id,t.report_date两个字段统计 这样前端页面能展示数据,但往往需要一个总记录数,在有分页的情况下用到 一种解决方法是在外面套一层,然后对其coun ...

随机推荐

  1. 排序算法C语言实现——冒泡排序

    /*冒泡O(n^2)*//*原理:    比较相邻的元素.如果第一个比第二个大,就交换他们两个.    对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数 ...

  2. python中map()函数的用法讲解

    map函数的原型是map(function, iterable, -),它的返回结果是一个列表. 参数function传的是一个函数名,可以是python内置的,也可以是自定义的. 参数iterabl ...

  3. SVN如何避免冲突

    在团队开发时,必然会用到代码版本控制工具,比如SVN. 但是多人共同维护同一份代码,当对同一文件进行增删时,就可能造成冲突,如何尽可能避免冲突相当重要. 首先,每次,新建任何文档,都会修改项目文件,所 ...

  4. grunt---grunt_test 测试用例

    说明: http://www.gruntjs.net/getting-started --grunt快速入门(创建package.json和Gruntfile.js准备一份新的 Grunt 项目一般需 ...

  5. 三丶人生苦短,我用python【第三篇】 pycharm

    1 pycharm的下载安装 下载地址:https://www.jetbrains.com/pycharm/download/#section=windows ....安装没啥好说的 建议购买正版,其 ...

  6. 图论trainning-part-1 F. Highways

    F. Highways Time Limit: 1000ms Memory Limit: 10000KB 64-bit integer IO format: %lld      Java class ...

  7. 九度oj 题目1109:连通图

    题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入: 每组数据的第一行是两个整数 n 和 m(0<=n<=1000).n 表示图的顶点数目,m 表示图中边的 ...

  8. [BZOJ1579] [Usaco2009 Feb]Revamping Trails 道路升级(分层图最短路 + 堆优化dijk)

    传送门 dis[i][j]表示第i个点,更新了j次的最短路 此题不良心,卡spfa #include <queue> #include <cstdio> #include &l ...

  9. TeraTerm设定(解决日文乱码问题)

    首先,字体Font的MS Gothic是有Japanese的,设置为这个比较保险. 其次,在General Setup里将Language设为:English. 原理是什么我也不清楚,试了几个选择,就 ...

  10. [USACO08DEC]Trick or Treat on the Farm (拓扑排序,DP)

    题目描述 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N个牛棚里转 悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大,所以约翰要想尽法子让奶牛们得到快乐. ...