热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汽车UDS诊断之诊断会话控制服务(0x10)深度剖析

DiagnosticSessionControl就是诊断会话控制服务,它是最为基础的一个诊断服务。诊断会话控制服务描述DiagnosticSessionControl

DiagnosticSessionControl就是诊断会话控制服务,它是最为基础的一个诊断服务。


诊断会话控制
服务描述
DiagnosticSessionControl客户端向服务端请求启用不同的诊断会话。

目录

1.英文术语

2.缩写表

3.服务描述

3.1.诊断会话

3.2.诊断会话间的转换

3.3.易失性存储器和非易失性存储器

3.3.1.易失性存储器

3.3.2.非易失性存储器

3.4.在默认会话或非默认会话下允许的服务

 4.请求消息定义

4.1.请求消息子功能定义

4.2.请求消息数据参数定义

5.肯定响应消息定义

5.1.肯定响应消息数据参数定义

5.1.1.会话参数记录定义

5.1.2.会话层计时参数定义

6.否定响应消息定义

6.1.否定响应码

7.服务使用示例

7.1.示例#1- 启动编程会话

7.1.1.步骤1:请求启动编程会话

7.1.2.操作汇总




1.英文术语


英文术语翻译
DiagnosticSessionControl诊断会话控制
diagnostic session诊断会话也可以称为诊断模式
non-volatile memory非易失性存储器(缩写为NVM)
diagnostic session timer诊断会话计时器(在ISO15765-3中定义为S3_{server}
DiagnosticSessionControl Request SID

诊断会话控制请求SID

ISO14229定义此值为0x10

sub-function子功能
diagnosticSessionType诊断会话类型

DiagnosticSessionControl Response SID

诊断会话控制响应SID

ISO14229定义此值为(0x10+0x40)

sessionParameterRecord会话参数记录
defaultSession默认会话
non-defaultSession非默认会话
ProgrammingSession程序会话,又称编程会话
extendedDiagnosticSession扩展会话
safetySystemDiagnosticSession安全系统会话


2.缩写表


缩写解释
SID服务标识符
NVM非易失性存储器
DTC故障码
Cvt

约定值

M 强制的

C 有条件的

U 用户选项

NRC否定响应码


3.服务描述


3.1.诊断会话

        诊断会话也可以称为诊断模式,服务端在同一时刻必然会处于某一种诊断会话下,且只能处于唯一一种诊断会话下,其实我们可以当诊断会话是UDS的“环境条件”,不同的诊断会话下所支持的诊断服务是不同的。譬如:请求某种诊断服务,但是当前的诊断会话是不支持此请求的服务,所以服务器就会去给服务器发一个否定响应。同时也记录着当前会话下数据链路层关于诊断服务的特定参数值(例如,计时参数值也就是诊断定时参数(如诊断响应的最大允许时间))。

        诊断会话总体上分为默认会话(也可称为默认会话模式)和非默认会话也可称为非默认会话模式)两种,非默认会话还可以进一步分为多个具体的诊断会话(如:程序会话、扩展会话等)。

注意:


  1. 服务端在上电时应进入默认诊断会话(简称默认会话),如果没有启动其他诊断会话,那么服务端应保持默认诊断会话。
  2. 服务端需要在进入请求的会话之后发肯定响应。


3.2.诊断会话间的转换

1、如果客户端请求了一个正在运行的诊断会话,那么服务端应该发送一个肯定响应。

例如:服务端当前处于默认会话下,客户端再去请求服务端进入默认会话,不要误以为此时我们服务端已经在默认模式下了,我们服务端就不需进行切换,服务端只需要发送一个肯定响应给客户端就可以了,这个考虑方式有点想当然了。此时我们要发的并不是一个肯定响应就够了,服务端还需要做的事情是完全初始化这个会话模式,如:将这个当前会话模式重新赋默认模式;这时也不需要定时器来定时;当这个会话模式重新赋值时(会话模式初始化也是会话模式变化的一种),服务端要重新上锁,还有一些就是跟UDS诊断状态和控制状态有关的都需要变回此服务端刚上电时的预定状态。

注意:上面的诊断会话如果是非默认会话,那么服务端初始化这个会话模式时,需要做的事情是


  • 将当前会话模式重新赋这个非默认会话;
  • 开启S3定时器(也称为诊断会话计时器),在ISO15765-3中参数名:S3Server ECU,这个用在非默认会话模式下,做自动跳转到默认会话的定时,标准建议5000ms,所以任何非默认会话都与诊断会话计时器相关联,服务端应在非默认会话模式下让诊断会话计时器保持活动状态,就是让它计
  • 服务端要重新上锁;
  • 还有跟此非默认会话模式下设置会回原先预定的状态(软件工程师内部确定的),譬如:设置回原先默认的UDS诊断状态和控制状态已提供给其他在此会话模式下支持的诊断服务。

2、服务器在上电时会处于默认会话下,我们可以通过给服务端发送诊断会话控制请求指令,使服务端切换到非默认会话。如果想要服务端保持在非默认会话,就需要在服务端自动跳转回默认会话之前这段时间给服务端发送诊断指令注意不要发默认会话指令,不然服务端会直接跳回默认会话模式),如果在这段时间没有发送诊断指令,那么服务端就会自动跳回默认会话

注意:


  1. 标准建议这段时间5000ms,在ISO15765中有详细描述,这个5000ms的计时时间是在服务端接收到诊断会话控制请求指令之后开始计时的。
  2. 这种从非默认会话模式自动跳回到默认会话模式的情况也会影响某些已经执行的服务行为而在默认模式下是不支持的,譬如:运行一段例程,如果超过5000ms没有给请求,就会自动回到默认会话下,相应的例程也要停止,因为例程控制服务在默认会话下是不支持的。

    这样就有了一个疑问就是我们超过5000ms的例程就不能完整执行了吗?
    注意我们有一个可以维持会话的服务就是诊断设备在线服务
    (0x3E)
     
  3. 这种从非默认会话模式自动跳回到默认会话模式的情况,我们也需要去考虑一些状态的重置即:当前会话模式重新赋默认会话默认,服务端要重新上锁,涉及到UDS诊断状态和控制状态有关的都需要变回此服务端刚上电时的预定状态(譬如:在非默认会话模式下控制通信报文不发出,我们在跳回到默认会话模式下时,需要恢复原来的通信,以免使用诊断仪的操作员忘记恢复通信

会话定时参数定义
定时参数说明类型推荐超时ms
S3_{Server}服务器在非默认会话模式下,没有接收到任何请求信息,服务器保持在此会话模式的时间,如果超出这个时间,服务端就会从非默认会话模式下跳转到默认会话模式下。时间重置值5000ms

服务端诊断会话状态图

服务端在默认会话和非默认会话间转换的时候遵循如下规则:


  • 默认-默认:当服务端当前处于默认会话时,如果收到切换默认会话的指令,服务端应完全初始化默认会话,涉及到有关UDS诊断状态和控制状态参数需要重置。这不包括编程到非易失性存储器中的长期变化譬如:我们不要是对一些EEPROM等外设进行重置,这样可能会给我们接下来的诊断操作带来一定的问题。             
    注:下面3.3中我们会着重讲一下非易失性存储器和易失性存储器的概念。
  • 默认-非默认:当服务端从默认会话切换到非默认会话时,只会停止ResponseOnEvent(0x86)服务在默认会话下的功能和配置。
  • 非默认-非默认:当ECU从非默认会话切换到非默认会话时(包含当前会话,譬如:扩展会话切换至工厂会话(一般供应商制定的会话模式,用于下线配置),或者是扩展会话切换至扩展会话。),服务端需要重新初始化诊断会话,总结以下三条初始化规则:
    1、停止ResponseOnEvent(0x86)服务在当前会话下的功能和配置。
    2、服务端安全访问状态重新上锁,即使切换到当前会话也要重新上锁。依赖于安全访问解锁的服务和功能要停止及相关的参数状态要重置,避免下次请求相关服务时,无法正常执行服务请求。
    譬如:例程控制服务涉及了一些状态啥,要恢复成原来未去执行此服务的有关的状态参量。
    3、在前后两个非默认会话下都支持的且不依赖于解锁状态的服务应该被保持,如通信控制和控制DTC设置 (这一块还么有看懂啊)                                                      
  • 非默认-默认:当服务端从非默认会话切换到默认会话时,要停止ResponseOnEvent(0x86)服务在当前会话(当前的非默认会话)下的功能和配置,安全访问状态重新上锁,在非默认会话下支持在默认会话下不支持的服务要停止,如:通信控制、输入输出控制等。但不要重置或改变非易失性存储器中的内容,如:使用2E写数据服务写入的参数。

    注意:以上一切的操作都要保证在新的会话模式下,所支持的所有服务在下一次请求开始都能够正常工作。

3、服务端在非默认会话下,也可以通过向服务端发送非诊断会话控制的诊断指令,以实现向默认会话的切换。

譬如:客户端向服务器发送ECU软件复位或者硬件复位后,如果服务端执行此服务诊断指令,系统就会重新开始,这样服务端又会回到默认会话。


3.3.易失性存储器和非易失性存储器


3.3.1.易失性存储器

易失性存储器就是指RAM,也叫主存,是CPU直接交换数据的内部存储器,它可以随时读写,而且速度很快,通常作操作系统其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它的易失性表现在一旦断电所储存的数据将随之丢失。


3.3.2.非易失性存储器

非易失性存储器指断电后存储的数据没有丢失的存储器。

根据存储器内的数据是否能够在使用电脑时随时被改写为标准,可以将其分为两大类产品,即ROMFlash memory。

非易失性存储器主要有以下类型:

1、ROM  (Read-only memory,只读内存) 


  • PROM(Programmable read-only memory,可编程只读内存)  
  • EAROM(Electrically alterable read only memory,电可改写只读内存)   
  • EPROM(Erasable programmable read only memory,可擦可编程只读内存)
  • EEPROM(Electrically erasable programmable read only memory,电可擦可编程只读内存)

2、Flash memory(闪存)         

                                                                      


3.4.在默认会话或非默认会话下允许的服务


在默认会话或非默认会话下允许的服务
服务默认会话非默认会话
诊断会话控制(0x10)允许允许
ECU复位(0x11)允许允许
安全访问(0x27)不适用允许
通信控制(0x28)不适用允许
待机握手(0x3E)允许允许
访问计时参数(0x83)不适用允许
安全数据传输(0x84)不适用允许
DTC设置控制(0x85)不适用允许
事件响应(0x86)允许^a允许
链路控制(0x87)不适用允许
通过标识符读数据(0x22)允许^b允许
通过地址读取内存(0x23)允许^c允许
通过标识符读取比例数据(0x24)允许^b允许
通过周期标识符读取数据(0x2A)不适用允许
动态定义数据标识符(0x2C)允许^d允许
通过标识符写数据(0x2E)允许^b允许
通过地址写内存(0x3D)允许^c允许
清除诊断信息(0x14)允许允许
读取DTC信息(0x19)允许允许
通过ID控制输入输出(0x2F)不适用允许
例程控制(0x31)允许^e允许
请求下载(0x34)不适用允许
请求上传(0x35)不适用允许
传输数据(0x36)不适用允许
请求退出传输(0x37)不适用允许
请求文件传输(0x38)不适用允许

a:在默认会话下是否允许事件响应服务由具体实施情况(车辆制造商内部内部决定即可)而定。

b:在默认会话下,对于数据标识符的操作可以说是不支持的,因为他加了安全访问等级,而我们在默认模式下是不支持安全访问服务的,就只能切换至非默认会话下请求安全访问服务才可解锁,再去请求此服务才可响应。

c:在默认会话下,对于内存地址的操作可以说是不支持的,因为他加了安全访问等级,而我们在默认模式下是不支持安全访问服务的,就只能切换至非默认会话下请求安全访问服务才可解锁,再去请求此服务才可响应。

d:数据标识符能够在默认会话和非默认会话下被动态定义

e:例程控制需要使用安全访问服务,因此需要非默认会话,客户端主动停止的例程程序也需要在非默认会话下。

这里的允许^b、允许^c、允许^e并不是说此服务在当前会话中需要去请求安全访问服务进行解锁,而这里的安全访问服务必须在非默认会话下进行的,所以我们在此默认会话下,需用诊断会话服务切换至非默认会话,再去请求安全访问服务进行解锁,当进入此解锁状态,我们就可以在此非默认会话模式下请求可支持的服务。

所以我们如果已经是非默认会话服务,标有b、c、e的服务也就需要服务端先解锁后才能支持这些服务。其他服务可由车辆制造商定义安全访问等级或者不支持安全访问。

从表中可以看出,在默认会话下支持的服务由诊断会话控制、服务端复位、数据读取、故障码读取和清除等服务,而写入数据、通讯控制、输入输出控制、等服务都需要在非默认会话下执行,原因可以归纳为以下几点:


  • 有的服务会改变服务端的功能状态,例如:通信控制会关闭服务端通信报文,这种状态如果一直持续就会影响服务端的正常功能,所以保证服务端总是能够返回的正常状态。
    只依靠诊断仪发送诊断指令重新开启通信报文时不安全的,因为有的时候操作人员用诊断仪执行完必须的操作后直接就把诊断仪拔掉了,并不能保证操作人员每次都能手动恢复默认状态。所以我们要求这一类服务要在非默认会话下执行,我们前文中说过,非默认会话下服务端如果一段时间收不到这段指令就自动返回默认会话,服务端的状态会按上文所述的规则进行重置,就包括把通信报文重新打开。这样,我们就可以保证服务端总能返回默认的正常状态。这一类服务主要包括通信控制、控制DTC设置、以及输入输出控制等。
  • 还有的服务具有一定的危险性,或会对服务端的功能 产生永久性的改变,比如输入输出控制会操作服务端外部的一些执行器,如果操作不当造成部件损坏或人身危险;写参数服务会通过改变服务端内部的一些标定参数来永久性的改变服务端功能,如改写发送机扭矩限值来提高车辆动力。这一类的服务不允许随便执行,需要经过一个安全访问(0x27服务),就好比拿一把钥匙后才可以执行,这个安全访问其实也是通过诊断指令来使服务端进入一种允许的更高级别操作的解锁状态,这种解锁状态就像上一种情况所说的非默认状态一样,服务端不能一直处于这种状态,所以安全访问0x27服务也要放在非默认会话下执行,当服务端返回默认会话时,ECU重新上锁。因此,需要在解锁模式下执行的服务就也就只能在非默认会话下去执行。


     

 4.请求消息定义


请求消息定义
A_Data字节参数名称Cvt字节值助记符
#1诊断会话控制请求SIDM0x10DSC
#2子功能=[诊断会话类型]M0x00-0xFFLEV_DS_

4.1.请求消息子功能定义

该服务使用子功能参数诊断会话类型”选择服务端的特定行为。(此字节的bit7表示抑制肯定响应位,下表并没有介绍此位)。


请求消息子功能参数定义 
位6-0描述Cvt助记符
0x00

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD
0x01

默认会话

此诊断会话启用服务端中的默认会话,在此会话下不存在超时,就是说不存在有自动跳转到某个会话模式的情况,它也不需要诊断设备在线服务(0x3E)来维持这种模式。

如果服务端处于非默认会话时,再次启动默认会话,应遵循以下实施规则:

1、当客户端发送默认会话请求时,停止当前的非默认会话,并启动默认会话后,向客户端发送肯定响应。

2、在服务端发送肯定响应之前,重新对服务器上锁(把门关起来,把锁锁上,在门里面服务,不解锁就享受不了)。

3、如果服务端发送带有诊断会话控制请求服务标识符的否定响应,则应继续保持非默认会话模式,时长是建议的5000ms,也就是在发送否定响应之后开始重新计时5000ms。

4、在非诊断会话下,其他非诊断会话控制服务(除ECU复位服务之外,这也是一种特殊情况)请求,服务端无论发送的是肯定响应还是否定响应之后,可继续保持非默认会话模式,时长是建议的5000ms,即继续保持在非默认会话5000ms。

MDS
0x02

编程会话

此诊断会话启用服务端中的编程会话,在此会话下用于支持所有有关服务端内存编程的诊断服务。

经验总结在非引导程序(应用程序)中,编程会话一般都是不用的,所以在默认会话下,请求跳转到编程会话下一般都设为不支持。

如果服务端在引导软件(bootloader)中运行编程会话,则只能通过三种方式退出编程会话:

1、客户端向服务端请求ECU复位(0x11)服务;

2、客户端向服务端请求会话类型等于默认会话的诊断会话控制(0x10)服务;

3、服务端中的会话层超时(就是设定的5000ms的计时超时了,就直接跳回到默认会话模式

如果服务端在引导软件运行时接收到默认诊断会话控制(0x10)服务会话层超时时,且存在有效的应用程序软件,则服务端应重新启动应用程序软件。

本标准并没有明确如何去实现有效应用程序重新启动的方法。

这个我们在做bootloader的UDS的时候,再去深入研究吧

UPRGS
0x03

扩展会话

此诊断会话可用于启用支持与调整服务端内存中诸如“怠速、CO值等”功能所需的所有诊断服务。

也可以用于在此会话模式下,进入新非默认会话,譬如:有些系统功能供应商定义了一些其他的非默认会话模式,需要先进入扩展模式后才能根据相应的会话指令进入新的非默认会话模式。

(这也就是我们为什么叫它扩展会话的原因。)

UEXTDS
0x04

安全系统诊断会话

此诊断会话启用支持与安全系统相关功能(例如,安全气囊展开)所需的所有诊断服务。

USSDS
0x05-0x3F

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD
0x40-0x5F

车辆制造商特定

此值范围保留以供车辆制造商特定使用

UVMS
0x60-0x7E

系统供应商特定

此值范围保留以供系统供应商特定使用

USSS
0x7F

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD

4.2.请求消息数据参数定义

此服务不支持请求消息中的数据参数。(所以我们请求报文只有2个字节数据,一个是SID,另一个是子功能


5.肯定响应消息定义


肯定响应消息定义
A_Data字节参数名称Cvt字节值助记符
#1诊断会话控制响应SIDM0x50DSCPR
#2子功能 = [诊断会话类型]M0x00 - 0xFFLEV_DS_

#3

#6

会话参数记录[] = [

                          数据#1

                            :

                          数据#4]

M

M

0x00 - 0xFF

       :

0x00 - 0xFF

SPREC_

    DATA_1

        :

    DATA_4


5.1.肯定响应消息数据参数定义


肯定响应消息数据参数定义
定义

诊断会话类型

此参数与请求消息子功能参数的位6~0相同。

会话参数记录

此参数记录包含服务端报告的会话特定参数值。(此会话特定参数在下面表格中有明确定义)


5.1.1.会话参数记录定义


会话参数记录定义
记录中的字节位置描述Cvt字节值助记符

#1

#2

#3

#4

会话参数记录[] = [

                             P2Server_max(高字节)

                             P2Server_max(低字节)

                             P2*Server_max(高字节)

                             P2*Server_max(低字节)]

M

M

M

M

0x00 - 0xFF

0x00 - 0xFF

0x00 - 0xFF

0x00 - 0xFF

SPREC_

   P2SMH

   P2SML

   P2ESMH

   P2ESML


会话参数记录内容定义
参数描述字节数分辨率最小值最大值
P2Server_max

服务端支持的默认P2Server_max计时,用于当前诊断会话。

车辆制造商可定义此最大值

21ms0ms65535ms
P2*Server_max

服务端支持的增强(NRC0x78)P2Server_max,用于当前诊断会话

车辆制造商可定义此最大值

210ms0ms655350ms

5.1.2.会话层计时参数定义


会话层计时参数定义
计时参数描述类型
P2Server服务端在接收到请求消息后从响应消息开始的性能要求(通过T_Data.ind指示)。性能要求
P2*Server在传输带有否定响应代码0x78的否定响应消息(通过T_Data.con指示)后,服务器从响应消息开始的性能要求 (增强的响应时间)。性能要求


6.否定响应消息定义


否定响应消息定义
A_Data字节参数名称字节值Cvt助记符
#1否定响应SID0x7FMSIDNR
#2诊断会话控制请求SID0x10MSIDRQ
#3否定响应码0xXXMNRC_

6.1.否定响应码


此服务支持的否定响应码
NRC描述助记符
0x12

不支持该子功能

如果不支持该子功能参数,则应发送此否定响应码。

SFNS
0x13

不正确的消息长度或无效格式

如果消息长度错误,则应发送此否定响应码。

IMLOIF
0x22

条件不正确

如果未满足请求诊断会话控制的条件,则应返回此否定响应码。

CNC


7.服务使用示例


7.1.示例#1- 启动编程会话


7.1.1.步骤1:请求启动编程会话

假定P2Server_max 等于50ms并且P2*Server_max 等于5000ms


诊断会话控制请求

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

诊断会话控制请求SID

0x10

DSC

#2

子功能 = 编程会话

               抑制肯定响应位 = 假

0x02

DS_ECUPRGS


肯定响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

诊断会话控制响应SID

0x50

DSCPR

#2

子功能 = 编程会话

0x02

DS_ECUPRGS
#3会话参数记录[P2Server_max(高字节)]0x00SPREC_1
#4会话参数记录[P2Server_max(低字节)]0x32SPREC_2
#5会话参数记录[P2*Server_max(高字节)]0x01SPREC_3
#6会话参数记录[P2*Server_max(低字节)]0xF4SPREC_4


7.1.2.操作汇总

步骤1:请求启动编程会话

图解:


操作CAN报文实体
01234567
请求启动编程会话0x020x100x02     客户端
肯定响应0x060x500x020x000x320x010xF4 服务端

到这里我们的0x10服务基本学完了。

以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!

有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务


推荐阅读
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 大势至服务器文件备份系统是一款专为服务器数据保护设计的安全软件,能够实现自动化的全量备份和增量备份,支持多种备份目标,如服务器其他分区、外接硬盘、其他服务器或NAS存储空间,并提供灵活的备份频率设置,有效保障服务器文件的安全。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
author-avatar
粉奈訫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有