电子规范管理系统standardms在linux系统中部署遇到的坑

版权声明:本文为博主原创文章,未经博主允许不得转载。

局域网内用一台闲置的电脑,安装了linux,部署了engineercms,docker和onlyoffice进行项目管理、文档协作,还缺少一利器:电子规范管理。于是请一哥们帮忙编译了我的standardms电子规范管理系统。

第一次编译,还是老问题,源码中,路径是win下的“\\”,到linux系统下是不行的,必须全部改成“/”。

重新编译,在linux系统下运行,新上传的pdf文件可以下载阅览,以前的pdf文件,死活下载不了。

找了很久,怀疑是文件的读写权限,文件夹的读写权限,都不是。

终于发现,原来,用securefx上传文件到linux系统下,中文文件名全被修改了,可是在securefx里却看不出来什么异样。用securecrt在命令行下,列表文件,就发现上传的中文文件名都乱码了。用flashfxp上传就没问题,standardms可以访问。

上网查securefx乱码解决方案,原来是将ini文件的00000最后一个0改为1就行了。

果然,解决了大问题。

电子规范管理系统其实有不少商用的,也有不少网站提供下载,官方的也逐渐放开了电子版的下载了。不过暂时还是犹抱琵琶半遮面,都不是很齐全,自己收集的一些电子规范,在单位里用用,平时解燃眉之急,开审查会,也可以随时通过VPN进入局域网内进行检索,甚是方便。

这个系统开发一个自动更新规范编号有效版本的数据库,根据网络上最新发布的规范编号进行更新,仅仅是更新编号数据库,如果发现检索到的电子规范,其名称与规范数据库中的版本号不一致,提醒这个规范已经过期,需要谨慎对待。但旧规范没必要删除,可以作为对照使用。

爬虫

package main

import (
	"fmt"
	"log"
	"net/http"
	"strconv"

	"code.google.com/p/mahonia"
	"github.com/PuerkitoBio/goquery"
	"github.com/mozillazg/request"
	"github.com/tealeg/xlsx"
)

type Cata1 struct {
	Id           string
	Number       string
	Title        string
	Category     string
	Leixing      string
	Banbudata    string
	Shishidata   string
	Licinumber   string
	Feizhidata   string
	Tidainumber  string
	Biaozhunfile string
}

func mainrequest1() {
	c := new(http.Client)
	req := request.NewRequest(c)
	req.Cookies = map[string]string{
		"JSESSIONID": "EF9156C40832CF0ADC83F7A509C90350", 
		"stylePath": "",
	}

	slice1 := make([]Cata1, 0)
	for i := 0; i < 5; i++ {//分页
		//职业健康法律
		resp, _ := req.Get("http://xxx/ProjManager/flfgv08070300009.jsp?flf81024flfgl01=%D6%B0%D2%B5%BD%A1%BF%B5%B0%B2%C8%AB%B7%A8%C2%C9%B7%A8%B9%E6&08070300004_page=" + strconv.Itoa(i))
		//环境法律
		//		resp, _ := req.Get("http://xxx/ProjManager/flfgv08070300009.jsp?flf81024flfgl01=%BB%B7%BE%B3%B7%A8%C2%C9%B7%A8%B9%E6&08070300004_page=" + strconv.Itoa(i))
		//规范
		//		resp, _ := req.Get("http://xxx/ProjManager/flfgv08070300009.jsp?flf81024flfgl01=%BC%BC%CA%F5%B1%EA%D7%BC&08070300004_page=" + strconv.Itoa(i))
		//	j, _ := resp.Text()
		//	fmt.Println(j)
		defer resp.Body.Close() // Don't forget close the response body

		dec := mahonia.NewDecoder("GB2312") //定义转换乱码
		//	fmt.Println(dec.ConvertString(j))   //转成utf-8

		rd := dec.NewReader(resp.Body)
		doc, err := goquery.NewDocumentFromReader(rd)
		if err != nil {
			log.Fatal(err)
		}
		//	var Cata []*Cata1
		// Find the review items
		doc.Find("tr.trclass").Each(func(i int, s *goquery.Selection) {
			// For each item found, get the band and title
			//		band := s.Find("td").Text()
			//		fmt.Print(band)
			aa := make([]Cata1, 1)
			s.Find("td.tdclass").Each(func(i1 int, s1 *goquery.Selection) {
				//band := s1.Text()
				if i1 == 0 && s1.Text() != "" {
					aa[0].Number = s1.Text()
					//				fmt.Printf("%d:1 %s\n", i1, s1.Text())
				}
				if i1 == 1 && s1.Text() != "" {
					aa[0].Title = s1.Text()
					//				fmt.Printf("%d:2 %s\n", i1, s1.Text())
				}
				if i1 == 2 && s1.Text() != "" {
					aa[0].Category = s1.Text()
					//				fmt.Printf("%d:3 %s\n", i1, s1.Text())
				}
				if i1 == 3 && s1.Text() != "" {
					aa[0].Leixing = s1.Text()
					//				fmt.Printf("%d:4 %s\n", i1, s1.Text())
				}
				if i1 == 4 && s1.Text() != "" {
					aa[0].Banbudata = s1.Text()
					//				fmt.Printf("%d:5 %s\n", i1, s1.Text())
				}
				if i1 == 5 && s1.Text() != "" {
					aa[0].Shishidata = s1.Text()
					//				fmt.Printf("%d:6 %s\n", i1, s1.Text())
				}
				if i1 == 6 && s1.Text() != "" {
					aa[0].Licinumber = s1.Text()
					//				fmt.Printf("%d:7 %s\n", i1, s1.Text())
				}
				if i1 == 7 && s1.Text() != "" {
					aa[0].Feizhidata = s1.Text()
					//				fmt.Printf("%d:8 %s\n", i1, s1.Text())
				}
				if i1 == 8 && s1.Text() != "" {
					aa[0].Tidainumber = s1.Text()
					//				fmt.Printf("%d:9 %s\n", i1, s1.Text())
				}
				if i1 == 9 && s1.Text() != "" {
					aa[0].Biaozhunfile = s1.Text()
					//				fmt.Printf("%d:10 %s\n", i1, s1.Text())
				}
				//fmt.Printf("%d: 序号、编号、名称、分类……%s\n", i1, band) //, title
			})
			slice1 = append(slice1, aa...)
		})
	}
	//	fmt.Printf("slice1", slice1)
	//写入excel
	var file *xlsx.File
	var sheet *xlsx.Sheet
	var row *xlsx.Row
	var cell *xlsx.Cell

	file = xlsx.NewFile()
	sheet, _ = file.AddSheet("Sheet1")
	row = sheet.AddRow() //增加行

	cell = row.AddCell() //增加列
	cell.Value = "#"

	cell = row.AddCell() //增加列
	cell.Value = "标准编号"

	cell = row.AddCell() //增加列
	cell.Value = "标准名称"

	cell = row.AddCell() //增加列
	cell.Value = "标准类别"

	cell = row.AddCell() //增加列
	cell.Value = "法律法规类型"
	cell = row.AddCell() //增加列
	cell.Value = "颁布日期"
	cell = row.AddCell() //增加列
	cell.Value = "实施日期"
	cell = row.AddCell() //增加列
	cell.Value = "历次被替代标准编号"
	cell = row.AddCell() //增加列
	cell.Value = "废止日期"
	cell = row.AddCell() //增加列
	cell.Value = "替代标准编号"
	cell = row.AddCell() //增加列
	cell.Value = "标准文件"
	for w, z := range slice1 { //行
		row = sheet.AddRow() //增加行

		cell = row.AddCell() //增加列

		cell.Value = strconv.Itoa(w + 1)

		cell = row.AddCell() //增加列
		cell.Value = z.Number

		cell = row.AddCell() //增加列
		cell.Value = z.Title

		cell = row.AddCell() //增加列

		cell.Value = z.Category

		cell = row.AddCell() //增加列

		cell.Value = z.Leixing
		cell = row.AddCell() //增加列
		cell.Value = z.Banbudata
		cell = row.AddCell() //增加列
		cell.Value = z.Shishidata
		cell = row.AddCell() //增加列
		cell.Value = z.Licinumber
		cell = row.AddCell() //增加列
		cell.Value = z.Feizhidata
		cell = row.AddCell() //增加列
		cell.Value = z.Tidainumber
		cell = row.AddCell() //增加列
		cell.Value = z.Biaozhunfile

	}

	err := file.Save("MyXLSXFile.xlsx")

	if err != nil {
		fmt.Printf(err.Error())
	}

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

关于JSON.stringify和Unicode编码,需要注意的几点

1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码 2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转...

42280
来自专栏GuZhenYin

ASP.NET Core文件上传与下载(多种上传方式)

官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads

29200
来自专栏技术小讲堂

ASP.NET AJAX(8)__Microsoft AJAX Library中异步通信层的使用什么是异步通信层Micorsoft AJAX Library异步通信层的组成WebRequestExec

什么是异步通信层 Microsoft AJAX Library的组长部分之一 负责ASP.NET AJAX框架中所有的客户端与服务器端的通信 其默认实现了封装了...

35950
来自专栏林德熙的博客

win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序 VisualStudio创建项目引用项目创建通用结构设置控制器运行网站UWP 连接上传数据

本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台。 本文因为没有什么业务,也不想做管理...

13710
来自专栏GuZhenYin

ASP.NET Core文件上传与下载(多种上传方式)

前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.N...

63660
来自专栏林德熙的博客

win10 uwp 网络编程 带Header的WebRequest获取BufferHttpClient 使用 Cookie

上面传输的头,Head=Head+length 中的第二个Head,包含 传输者id,当前传输是传输的消息最后一段还是中间,当前传输 是服务器第消息

12810
来自专栏听雨堂

【6】页面数据和控件的自动交换机制

阅读目录 数据维护通用流程 数据的加载 数据的修改 数据的添加 自动交换机制 使用PageX来完成数据的自动加载 非标准数据的处理 只要...

24680
来自专栏Porschev[钟慰]的专栏

Asp.Net无刷新上传并裁剪头像

开发网站几乎都做过上传图片并截图,做个无刷新Asp.Net上传并截图示例 实现功能: 1.选择文件,自动上传并生成缩放图(上传带进度条),形成预览图 2.在预览...

51870
来自专栏烙馅饼喽的技术分享

我的CMS开发记-5 实现静态化页

      为了实现静态化页,我在博客园里可是搜了半天。最后找到两个方案:  http://www.cnblogs.com/hsqzzzl/archive/20...

378100
来自专栏大内老A

如何通过自定义MessageFilter的方式利用按键方式操作控件滚动条[附源代码]

很长一段时间内,一直在做一个SCSF(Smart Client Software Factory)的项目,已经进入UAT阶段。最近,用户提出了一个要求:需要通过...

31170

扫码关注云+社区

领取腾讯云代金券