`

FTP上传日志

 
阅读更多

本类的功能:

1.每天凌晨1点自动上传昨天的一天的日志信息。

2.上传当天的日志信息。

注意点:

1.日志信息为存储于数据库中的json字符串。

2.生产的文件为xml格式,生成文件存储路径:工程名\WEB-INF\classes\4ALog

3.每个日志不超过1M

 

    LogTask.java

 

package org.jasig.cas.a4.tools;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimerTask;

import org.apache.log4j.Logger;
import org.json.JSONObject;

import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;


/**
 * Title : AuditLog4AService
 * <p/>
 * Description : 4A审计日志非实时接口
 * <p/>
 * CopyRight : CopyRight (c) 2011
 * <p/>
 * Company : 亚信联创科技(中国)有限公司
 */
public class LogTask extends TimerTask {
	
	private static String propertieName = "4ALog.properties";
    private static String charset = "UTF-8";
	public static A4LogDao a4LogDao;

    private static final int size = 1 * 1024 * 1024;
    //测试
//    private static final int size = 2 * 1024; //* 1024;
    
    private Logger log = Logger.getLogger(LogTask.class);

    private boolean upLoadTodayLog = false;
    /**
     * {@inheritDoc}
     * 
     * @see java.util.TimerTask#run()
     */
    @Override
    public void run() {
        // 获取4A审计日志调度开关
        try {
            String  A4_switch = UtilProperties.getProperty(propertieName, "A4_switch","0");
            if ("0".equals(A4_switch))return;
        } catch (Exception ex) {
            throw new RuntimeException("Error reading 4ALog.properties file. "
                    + ex.getMessage(), ex);
        }
        Date startDate = null;
        List<String> list = null;
      
        	try {
        		if(this.upLoadTodayLog==true){
        			//上传当天的日记
        			startDate = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday());
        			list = a4LogDao.query(startDate,DateUtil.nextDate(startDate, 1));
        		}else{
        			Date endDate = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday());
        			// 凌晨1点开始上传昨天的日志    精确到天的时间 2013-10-22
        			startDate = DateUtil.nextDate(endDate, -1);
        			list = a4LogDao.query(startDate, endDate);
        		}
				
			} catch (ParseException e) {
			}
    
        
        if(list==null || list.size()==0)return;
        
        // 日志文件名定义
       
        String realPath = this.getClass().getClassLoader().getResource(
        		File.separator).getFile();
        String filePath = realPath + File.separator + "4ALog";
        
        File fileDir = new File(filePath);
        if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        String fileDate = DateUtil.date2String(startDate, DateUtil.YYYYMMDD);
        int index = 1;
        File file = new File(filePath + File.separator + "4A." + fileDate
                + "_"+index + ".log");

        FileOutputStream fos = null;
        try {
            // 写文件头
            StringBuffer sb = new StringBuffer();
            sb.append("<?xml version='1.0' encoding='UTF-8'?>\n");
            sb.append("<ROOT>\n");
            fos = new FileOutputStream(file);
            fos.write(sb.toString().getBytes(charset));
           
           
           for (String jsonStr : list) {
        	   JSONObject jsonObj = new JSONObject(jsonStr);

                // 当写日志文件超过1M时,写文件尾,上传到FTP服务器,并新写入另一个日志文件,文件号自加1
                if (file.length() >= size - 1000) {
                    fos.write("</ROOT>".getBytes(charset));
                    fos.flush();
                    fos.close();
                    this.uploadFile(file);
                    index = index + 1;
                    file = new File(filePath + File.separator + "4A."
                            + fileDate+ "_"+ index + ".log");
                    fos = new FileOutputStream(file);
                    fos.write(sb.toString().getBytes(charset));
                }

                String identity_name = "JTNGBAM";
                String resource_code = "JTNGBAM";
                String module_id = "";
                String module_name = "";
                // 写日志文件内容
                StringBuffer log = new StringBuffer();
                log.append("<LOG4A>\n  ");
                log.append("<RESOURCE_KIND>").append("1").append("</RESOURCE_KIND>\n  ");
                log.append("<IDR_CREATION_TIME>").append( DateUtil.date2String(new Date(),
                            DateUtil.YYYY_MM_DD_HH_MM_SS)).append("</IDR_CREATION_TIME>\n  ");
				log.append("<IDENTITY_NAME>").append(identity_name).append("</IDENTITY_NAME>\n  ");
                log.append("<RESOURCE_CODE>").append(resource_code).append("</RESOURCE_CODE>\n  ");
                
                log.append("<MAIN_ACCOUNT_NAME>").append(jsonObj.getString("main_account_name")).append("</MAIN_ACCOUNT_NAME>\n  ");
                log.append("<SUB_ACCOUNT_NAME>").append(jsonObj.getString("sub_account_name")).append("</SUB_ACCOUNT_NAME>\n  ");
                log.append("<OPERATE_TIME>").append(jsonObj.getString("operate_time")).append("</OPERATE_TIME>\n  ");
                log.append("<OP_TYPE_NAME>").append(jsonObj.getString("op_type_name")).append("</OP_TYPE_NAME>\n  ");
                log.append("<OP_TYPE_ID>").append(jsonObj.getString("op_type_id")).append("</OP_TYPE_ID>\n  ");
                log.append("<OP_LEVEL_ID>").append(jsonObj.getString("op_level_id")).append("</OP_LEVEL_ID>\n  ");
                log.append("<OPERATE_RESULT>").append(jsonObj.getString("operate_result")).append("</OPERATE_RESULT>\n  ");
               
                
             
				log.append("<MODULE_ID>").append(module_id).append("</MODULE_ID>\n  ");
                log.append("<MODULE_NAME>").append(module_name).append("</MODULE_NAME>\n  ");
                
                log.append("<OPERATE_CONTENT>").append(jsonObj.getString("operate_content")).append("</OPERATE_CONTENT>\n  ");
                log.append("<OBJECT_ID>").append("").append("</OBJECT_ID>\n  ");
                log.append("<OBJECT_NAME>").append("").append("</OBJECT_NAME>\n   ");
                log.append("<CLIENT_NETWORK_ADDRESS>").append(jsonObj.getString("client_address")).append("</CLIENT_NETWORK_ADDRESS>\n  ");
                log.append("<CLIENT_ADDRESS>").append(jsonObj.getString("client_address")).append("</CLIENT_ADDRESS>\n  ");
                log.append("<SERVER_ADDRESS>").append(jsonObj.getString("server_address")).append("</SERVER_ADDRESS>\n  ");
               
                log.append("<CLIENT_CPU_SERIAL>").append("").append("</CLIENT_CPU_SERIAL>\n  ");
                log.append("<CLIENT_PORT>").append("").append("</CLIENT_PORT>\n  ");
                log.append("<CLIENT_MAC>").append("").append("</CLIENT_MAC>\n  ");
                log.append("<SERVER_PORT>").append("").append("</SERVER_PORT>\n  ");
                log.append("<SERVER_MAC>").append("").append("</SERVER_MAC>\n  ");
                log.append("<SERVER_MAC>").append("").append("</SERVER_MAC>\n  ");
                
                log.append("<BANKAPPROVE>").append("").append("</BANKAPPROVE>\n  ");
                log.append("<BANKFLAG>").append("").append("</BANKFLAG>\n  ");
                /*   
                log.append("<DB_INFO_CODE>").append(db_info_code).append("</DB_INFO_CODE>\n  ");
                log.append("<SQL_TABLES>").append(jsonObj.getString("sql_tables")).append("</SQL_TABLES>\n  ");
                log.append("<SQL_WHERE_CONDITIONS>").append(jsonObj.getString("sql_where_conditions")).append("</SQL_WHERE_CONDITIONS>\n  ");
                log.append("<TASK_CODE>").append("").append("</TASK_CODE>\n  ");
               
                */
                log.append("</LOG4A>\n");
                
                fos.write(log.toString().getBytes(charset));
                fos.flush();
            }
            fos.write("</ROOT>".getBytes(charset));
            fos.flush();
            fos.close();
            this.uploadFile(file);
        } catch (Exception e) {
        	log.info("log:"+file.getPath()+" upload fail");
            throw new RuntimeException("Connect to the database error. "
                    + e.getMessage(), e);
        } 
    }

    /**
     * Description: 上传文件到FTP服务器
     * 
     * @param file
     *        上传文件
     */
    private  void uploadFile(File file) {
    	log.info("start upload log:"+file.getPath());
        String ftpServer = "";
        String ftpUser = "";
        String ftpPwd = "";
        int ftpPort = 21;
        try {
            ftpServer = UtilProperties.getProperty(propertieName, "4a_ftp_server");
            ftpUser = UtilProperties.getProperty(propertieName, "ftp_user");
            ftpPwd = UtilProperties.getProperty(propertieName, "ftp_password");
            ftpPort = Integer.parseInt( UtilProperties.getProperty(propertieName, "ftp_port"));
        } catch (Exception ex) {
        	log.info("fail to read  4ALog.properties");
            throw new RuntimeException("Error reading configuration file. "+ ex.getMessage(), ex);
        }
        // 连接FTP服务器
        FtpClient ftpClient = new FtpClient();
        try {
            ftpClient.openServer(ftpServer, ftpPort);
            ftpClient.login(ftpUser, ftpPwd);
            ftpClient.cd("/home/db2/gather_file/bam_remote/up"); 
//            ftpClient.cd("/home/smc/tomcat6smc/logs"); 
            log.info("上传ftp目录:\"" + ftpClient.pwd());  
            ftpClient.binary();
        } catch (IOException e) {
            throw new RuntimeException("FTP server connection failed. "+ e.getMessage(), e);
        }
        // 上传文件
        TelnetOutputStream tos = null;
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            String fileName = file.getName();
            tos = ftpClient.put(fileName);
            byte[] bytes = new byte[1024];
            int c;
            while ((c = fis.read(bytes)) != -1) {
                tos.write(bytes, 0, c);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException("File is not exist. " + e.getMessage(),e);
        } catch (IOException e) {
            throw new RuntimeException("Error uploading files. " + e.getMessage(), e);
        } finally {
            try {
                if (null != tos) tos.close();
                if (null != fis) fis.close();
                log.info("upload success file:"+file.getPath());
            } catch (IOException ex) {
                throw new RuntimeException(
                    "An error occurred while the stream is closed. " + ex.getMessage(), ex);
            }
        }
    }

	public void setUpLoadTodayLog(boolean upLoadTodayLog) {
		this.upLoadTodayLog = upLoadTodayLog;
	}

}

 

 

 A4LogDao .java

 

package org.jasig.cas.a4.tools;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class A4LogDao extends JdbcDaoSupport {
	private Logger log = LoggerFactory.getLogger(this.getClass());

	/*
	 * public static Map getMap() { HashMap<String, String> paraMap = new
	 * HashMap<String, String>(); paraMap.put("main_account_name",
	 * "test_wlt");// 主账号 paraMap.put("sub_account_name", "OPERATORID");// 从账号
	 * paraMap.put("op_type_id", "操作类型编码");// 操作类型编码 paraMap.put("op_type_name",
	 * "op_type_name");// 操作类型名称 用户登录 paraMap.put("op_level_id", "3");// 级别
	 * paraMap.put("operate_result", "1");// 操作结果 0-成功
	 * paraMap.put("operate_time", DateUtil.date2String(new Date(),
	 * "YYYY-MM-DD HH:mm:ss"));// 操作时间
	 * 
	 * paraMap.put("operate_content", "操作内容描述");// paraMap.put("object_id",
	 * "1-文件、2-库表、3-进程、4-菜单");// paraMap.put("object_name", "对象类型名称 汉字");//
	 * 
	 * paraMap.put("client_address", "127.0.0.1");//
	 * paraMap.put("server_address", "服务器ip");// paraMap.put("sql_tables",
	 * "该操作涉及的表名集合 表名1||表名2");// paraMap.put("sql_where_conditions",
	 * "例如:表名1.条件字段1=‘参数1’||表名2.条件字段1=‘参数2’");// return paraMap; } // 主方法,进行测试
	 * public static void main(String[] args) { A4LogDao dao = new A4LogDao();
	 * Date startDate = DateUtil.nextHour(new Date(), -1000);
	 * dao.insert(getMap());
	 * 
	 * }
	 */

	private String insert_sql;

	private String select_sql;

	public int insert(final Map<String, String> paraMap) {
		final String logMsg = new JSONObject(paraMap).toString();
		log.info("insert into logMsg:" + logMsg);
		log.info("insert_sql:" + insert_sql);

		int i =-1;
		try {
			i = super.getJdbcTemplate().update(insert_sql,
					new PreparedStatementSetter() {

						@Override
						public void setValues(PreparedStatement ps)
								throws SQLException {
							ps.setString(1, paraMap.get("main_account_name"));
							ps.setString(2, paraMap.get("op_level_id"));
							ps.setString(3, logMsg);
							Timestamp date = new Timestamp(new Date().getTime());
							// Timestamp date = new Timestamp(DateUtil.nextDate(
							// new Date(),
							// -4).getTime());

							ps.setTimestamp(4, date);
						}
					});
		} catch (Exception e) {
			log.info(e.getMessage());
			log.info(e+" "+e.getLocalizedMessage());
			e.getStackTrace();
			log.info("insert log  fail");
			log.info("fail logMsg:"+logMsg);
		}

		return i;

	}

	public List<String> query(Date startDate, Date endDate) {
		List<String> dataList = new ArrayList<String>();

		Timestamp date1 = new Timestamp(startDate.getTime());
		Timestamp date2 = new Timestamp(endDate.getTime());

		dataList = (List<String>) super.getJdbcTemplate().queryForList(
				select_sql, new Object[] { date1, date2 }, String.class);

		return dataList;
	}

	public void setInsert_sql(String insert_sql) {
		this.insert_sql = insert_sql;
	}

	public void setSelect_sql(String select_sql) {
		this.select_sql = select_sql;
	}

}

 调用测试

每天凌晨1点上传昨天的日志
------------------------------------------------------------------
Timer timer = new Timer();
	    	LogTask task = new LogTask();
	    	LogTask.a4LogDao = a4LogDao;
	    	 try {
				Date today = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday());//精确到天的时间 2013-10-22
	    		Date startTask = DateUtil.nextHour(today, 25);//每天凌晨1点上传昨天的日志
				long step = 1*24*60*60*1000; //时间间隔为24小时
	    		timer.schedule(task, startTask, step);
			} catch (ParseException e) {
			}
----------------------------------------------------------------------
		//上传当天日志
	
			// if("OFF".equals(A4switch)) return;
		     	Timer timer = new Timer();
		    	LogTask task = new LogTask();
		    	task.setUpLoadTodayLog(true);
		    	LogTask.a4LogDao = a4LogDao;
			timer.schedule(task,  new Date());
	

 

 

分享到:
评论

相关推荐

    毕业设计物联网实战项目基于Eclipse Theia开源框架开发的物联网在线编程IDE.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    Android毕设实战项目基于Android的医院挂号系统.zip

    【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    (源码)基于Python的KMeans和EM算法结合图像分割项目.zip

    # 基于Python的KMeans和EM算法结合图像分割项目 ## 项目简介 本项目结合KMeans聚类和EM(期望最大化)算法,实现对马赛克图像的精准分割。通过Gabor滤波器提取图像的多维特征,并利用KMeans进行初步聚类,随后使用EM算法优化聚类结果,最终生成高质量的分割图像。 ## 项目的主要特性和功能 1. 图像导入和预处理: 支持导入马赛克图像,并进行灰度化、滤波等预处理操作。 2. 特征提取: 使用Gabor滤波器提取图像的多维特征向量。 3. 聚类分析: 使用KMeans算法对图像进行初步聚类。 利用KMeans的聚类中心初始化EM算法,进一步优化聚类结果。 4. 图像生成和比较: 生成分割后的图像,并与原始图像进行比较,评估分割效果。 5. 数值比较: 通过计算特征向量之间的余弦相似度,量化分割效果的提升。 ## 安装使用步骤 ### 假设用户已经下载了项目的源码文件 1. 环境准备:

    HCIP第一次作业:静态路由综合实验

    HCIP第一次作业:静态路由综合实验

    毕设单片机实战项目基于stm32、esp8266和Android的智能家居系统-设备端.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    统计学基于Python的Johnson-SU分布参数计算与优化:数据拟合及弹性网络参数优化方法实现(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文详细介绍了Johnson-SU分布的参数计算与优化过程,涵盖位置参数γ、形状参数δ、尺度参数ξ和伸缩参数λ的计算方法,并实现了相应的Python代码。文中首先导入必要的库并设置随机种子以确保结果的可复现性。接着,分别定义了四个参数的计算函数,其中位置参数γ通过加权平均值计算,形状参数δ基于局部均值和标准差的比值,尺度参数ξ结合峰度和绝对偏差,伸缩参数λ依据偏态系数。此外,还实现了Johnson-SU分布的概率密度函数(PDF),并使用负对数似然函数作为目标函数,采用L-BFGS-B算法进行参数优化。最后,通过弹性网络的贝叶斯优化展示了另一种参数优化方法。; 适合人群:具有Python编程基础,对统计学和机器学习有一定了解的研究人员或工程师。; 使用场景及目标:①需要对复杂数据分布进行建模和拟合的场景;②希望通过优化算法提升模型性能的研究项目;③学习如何实现和应用先进的统计分布及优化技术。; 阅读建议:由于涉及较多数学公式和编程实现,建议读者在阅读时结合相关数学知识,同时动手实践代码,以便更好地理解和掌握Johnson-SU分布及其优化方法。

    TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip

    TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip

    毕业设计物联网实战项目基于Rtthread和MQTT搭建的物联网网关.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    基于STM32F103C8T6的温湿度传感器(HAL库版),通过串口向电脑端反馈数据(附通过ESP8266-01s模块连接WIFI上传云平台的资料代码-固件库版本).zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    自动发布Java项目(Tomcat)Shell脚本

    自动发布Java项目(Tomcat)Shell脚本

    (源码)基于webpack和Vue的前端项目构建方案.zip

    # 基于webpack和Vue的前端项目构建方案 ## 项目简介 本项目是基于webpack和Vue构建的前端项目方案,借助webpack强大的打包能力以及Vue的开发特性,可用于快速搭建现代化的前端应用。项目不仅完成了基本的webpack与Vue的集成配置,还在构建速度优化和代码规范性方面做了诸多配置。 ## 项目的主要特性和功能 1. 打包功能运用webpack进行模块打包,支持将scss转换为css,借助babel实现语法转换。 2. Vue开发支持集成Vue框架,能使用Vue单文件组件的开发模式。 3. 构建优化采用threadloader实现多进程打包,cacheloader缓存资源,极大提高构建速度开启热更新功能,开发更高效。 4. 错误处理与优化提供不同环境下的错误映射配置,便于定位错误利用webpackbundleanalyzer分析打包体积。

    Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》

    Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》PDF

    《基于YOLOv8的舞蹈动作分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    (源码)基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统.zip

    # 基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统 ## 项目简介 本项目是一个基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统。系统通过Arduino Feather M0采集传感器数据,并通过WiFi将数据传输到Raspberry Pi。Raspberry Pi运行BalenaOS,集成了MySQL、PHP、NGINX、Apache和Grafana等工具,用于数据的存储、处理和可视化。项目适用于环境监测、物联网设备监控等场景。 ## 项目的主要特性和功能 1. 传感器数据采集使用Arduino Feather M0和AM2315传感器采集温度和湿度数据。 2. WiFi数据传输Arduino Feather M0通过WiFi将采集到的数据传输到Raspberry Pi。

    《基于YOLOv8的音响设备识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Android毕设实战项目这是一个android 图书管理系统.zip

    【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕业设计物联网实战项目基于智龙2.0开发板和窄带物联网模块BC95。操作系统为RTT2.1。.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    (源码)基于Arduino的WiFi按钮项目.zip

    # 基于Arduino的WiFi按钮项目 ## 一、项目简介 本项目是一个基于ESP8266芯片的Arduino项目,主要实现WiFi连接、电压检测、LED灯控制以及向服务器发送POST请求等功能。通过简单的按钮操作,可以实现与服务器通信并获取相关信息,同时能检测电池电压并提示用户。 ## 二、项目的主要特性和功能 1. WiFi连接项目能够自动连接到指定的WiFi网络。 2. 电压检测通过ADC(模数转换器)检测电池电压,并在电压低于阈值时发出警告。 3. LED灯控制通过控制LED灯的亮灭来提示用户不同的状态信息(如连接成功、电压低等)。 4. 服务器通信项目可以向指定的服务器发送POST请求并处理返回的HTTP响应。 ## 三、安装使用步骤 1. 环境准备确保已安装Arduino IDE和ESP8266插件。 2. 下载源码下载项目的源码文件并解压。 3. 打开项目在Arduino IDE中打开解压后的main.cpp文件。

    scipy-0.10.1-cp26-cp26mu-manylinux1_x86_64.whl

    该资源为scipy-0.10.1-cp26-cp26mu-manylinux1_x86_64.whl,欢迎下载使用哦!

    计算机毕业设计;计算机毕设;Java毕业设计;小程序毕业设计

    计算机毕业设计;计算机毕设;Java毕业设计;小程序毕业设计;企业、旅游、党建、学校、人事、酒店、民宿、预约、考试、外卖、点餐、外贸、宠物、图书、销售、商城、就业、助农、仓储、交易、美食、博客、婚庆、二手、养老、医院、医疗、药品、招聘、考勤、宿舍、物流、租赁、公益等

Global site tag (gtag.js) - Google Analytics