一、
ContentLength 属性
.NET Framework 类库
获取或设置发送的数据的内容长度。
[Visual Basic]
Overrides Public Property ContentLength As Long
[C#]
public override long ContentLength {get; set;}
[C++]
public: __property __int64 get_ContentLength();
public: __property void set_ContentLength(__int64);
[JScript]
public override function get ContentLength() : long;
public override function set ContentLength(long);
属性值
发送的请求数据的字节数。
异常
异常类型
条件
ArgumentException
ContentLength 小于 0。
示例
[Visual Basic, C#, C++] 下面的示例设置正被发送数据的内容长度。请参考 FileWebRequest 类中的完整示例。
[Visual Basic]
' Set the ContentLength property.
myFileWebRequest.ContentLength = byteArray.Length
Dim contentLength As String = myFileWebRequest.ContentLength.ToString()
Console.WriteLine(ControlChars.Lf + "The content length is {0}.", contentLength)
[C#]
// Set the ContentLength property.
myFileWebRequest.ContentLength=byteArray.Length;
string contentLength = myFileWebRequest.ContentLength.ToString();
Console.WriteLine("\nThe content length is {0}.", contentLength);
[C++]
// Set the ContentLength property.
myFileWebRequest->ContentLength=byteArray->Length;
String* contentLength = myFileWebRequest->ContentLength.ToString();
Console::WriteLine(S"\nThe content length is {0}.", contentLength);
二、
获取响应正文的大小(以字节为单位)。
lBytes = Response.ContentLength
返回值
lBytes As Long:表示响应正文的大小(以字节为单位)。
备注
ContentLength 属性度量存储响应正文的缓冲区中所用的空间大小。
如果为 Request.ResponseBufferSize 属性设置的值小于 HTTP 响应正文的大小,则 ContentLength 属性将等于 ResponseBufferSize 属性。它将小于响应正文的实际大小。
请求较大的文件时,请确保缓冲区足以容纳响应正文。如果不需要访问正文并希望使用由 Web 服务器设置的 Content-Length HTTP 头,则可将 Request.ResponseBufferSize 属性设置为零以提高性能。
注意,Response.BytesRecv 属性的值通常比 Response.ContentLength 和 Response.HeaderSize 两个属性值的总和大两个字节。BytesRecv 属性包括两个用于回车和分割消息头与正文的换行符的字节。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Procedure to calculate and log the size of the HTTP
' response message. Values determined from measuring the
' response data are compared to the value sent in the HTTP
' Content-Length header field.
'
Sub LogResponseSizeInfo(oResponse)
Dim lMessageSize
Dim strMessage
If (oResponse Is Nothing) Then
Call Test.Trace("Error: invalid request or host not found ")
Else
lMessageSize = oResponse.ContentLength + oResponse.HeaderSize
strMessage = "Response message information --------" & vbCrLf
strMessage = strMessage & "Body size, from Content-Length: " & _
CStr(oResponse.ContentLength) & vbCrLf
strMessage = strMessage & "Measured header size: " & _
CStr(oResponse.HeaderSize) & vbCrLf
strMessage = strMessage & "Sum of content length and header size: " _
& CStr(lMessageSize) & vbCrLf
strMessage = strMessage & "Measured bytes received: " & _
CStr(oResponse.BytesRecv) & vbCrLf
Call Test.Trace(strMessage)
End If
End Sub
三、
获取或设置用于存储 Web 服务器响应的缓冲区大小。
lBufferSize = Request.ResponseBufferSize [= lBufferSize]
返回值
lBufferSize As Long:表示存储服务器响应的缓冲区大小(以字节为单位)。默认值为 8192 字节。
备注
缓冲区表示用于存储响应正文的总内存量。如果响应正文的大小超过缓冲区的大小,ACT 将不存储剩余部分。Response.Body 属性仅返回缓冲区的内容,其中包含的响应消息正文可能不完整。
将 ResponseBufferSize 值设置为 0 可以稍微改善性能,但无法访问响应正文的任何部分。在这种情况下,Response.Body 命令将返回空字符串。
示例
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Procedure to test the effect of using different
' response buffer sizes.
'
Sub TestBufferedTTLB
Dim lCount, oConnection, oRequest, oResponse
Dim strServer
strServer = "localhost"
Set oConnection = Test.CreateConnection(strServer)
' check for connection errors
If (oConnection Is Nothing) Then
Call Test.Trace("Error: Unable to create connection.")
Else
Set oRequest = Test.CreateRequest
oRequest.Path = "/large.asp"
For lCount = 0 to 2000 Step 500
oRequest.ResponseBufferSize = lCount
Set oResponse = oConnection.Send(oRequest)
If (oResponse Is Nothing) Then
Call Test.Trace("Error: invalid request or host not found ")
Else
Call Test.Trace("Buffer=" & CStr(lCount) & ", TTLB=" & CStr(oResponse.TTLB))
End If
Next
Call oConnection.Close()
End If
End Sub
四、一个使用该属性作为文件大小的例子
(華版)
以前要在ASP里上载文件真的要写一大堆程序。。。比如说把文件分段转换成Base64然后才上载到服务器,而在服务器那边由要从Base64转会原本的byte值才可以分段写如文件中。但是在ASP.NET里就完全只需用一行代码加一个HtmlInputFile控件就能做完这些复杂的程序。
而要注意的就是紧记在包含HtmlInputFile控件的Form里多添加一个enctype的属性,enctype="multipart/form-data";然后再用HtmlInputFile控件里的PostedFile.SaveAs方法来上载文件就可以了。
<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
</form>
'声明变量
Dim filename As String
Dim data() As String
Try
'检查所选文件大小
If PostFileName.PostedFile.ContentLength = 0 Then
'显示上载结果
Label3.Text = "上载失败!"
Else
'显示所选文件资料
Label2.Text = "文件大小:" & PostFileName.PostedFile.ContentLength & " bytes<br>"
Label2.Text = Label2.Text & "文件类型:" & PostFileName.PostedFile.ContentType & "<br>"
Label2.Text = Label2.Text & "文件名称:" & PostFileName.PostedFile.FileName & "<br>"
'读取文件名称
data = Split(PostFileName.PostedFile.FileName, "\")
'上载文件到服务器
PostFileName.PostedFile.SaveAs(Server.MapPath(".") & "\" & data(UBound(data)))
'显示上载结果
With Label3
.Text = "上载成功!"
.ForeColor = Color.DarkGreen
End With
End If
Catch ex As Exception
'显示错误讯息
With Label3
.Text = "Error: " & ex.Message
.ForeColor = Color.Red
End With
End Try
整体来说,最为麻烦的也不过是要从PostedFile.FileName里读取真整的文件名称(不包括括file path);不过这也大可用以下的简短代码来完成。
'读取文件名称
data = Split(PostFileName.PostedFile.FileName, "\")
'文件名称
Debug.Print data(UBound(data))
如果要上载多个文件(为可更有效的重用代码),那可以用Request.File来读取每一个所选的文件名称;就如以下的代码。
'声明变量
Dim lIndex As Integer
Dim lCount As Integer
Dim hpf As HttpPostedFile
Dim filename As String
Dim data() As String
Try
'读取所有要上载文件的数目
lCount = Request.Files.Count
'读取每一个上载文件的资料
For lIndex = 0 To lCount - 1
'读取第N个上载文件的资料
hpf = Request.Files(lIndex)
'检查所选文件大小
If hpf.ContentLength = 0 Then
'显示所选文件资料
Label2.Text = Label2.Text & "<br>" & "文件大小:" & hpf.ContentLength & " bytes<br>"
Label2.Text = Label2.Text & "文件类型:" & hpf.ContentType & "<br>"
Label2.Text = Label2.Text & "文件名称:" & hpf.FileName & "<br>"
'读取文件名称
data = Split(hpf.FileName, "\")
'上载文件到服务器
PostFileName.PostedFile.SaveAs(Server.MapPath(".") & "\" & data(UBound(data)))
'显示上载结果
With Label3
.Text = "上载成功!"
.ForeColor = Color.DarkGreen
End With
End If
'释放资源
hpf = Nothing
Next
Catch ex As Exception
'显示错误讯息
With Label3
.Text = "Error: " & ex.Message
.ForeColor = Color.Red
End With
End Try
获取或设置发送的数据的内容长度。
[Visual Basic] Overrides Public Property ContentLength As Long [C#] public override long ContentLength {get; set;} [C++] public: __property __int64 get_ContentLength(); public: __property void set_ContentLength(__int64); [JScript] public override function get ContentLength() : long; public override function set ContentLength(long);
属性值
发送的请求数据的字节数。
异常
异常类型 | 条件 |
---|---|
ArgumentException | ContentLength 小于 0。 |
示例
[Visual Basic, C#, C++] 下面的示例设置正被发送数据的内容长度。请参考 FileWebRequest 类中的完整示例。
[Visual Basic] ' Set the ContentLength property. myFileWebRequest.ContentLength = byteArray.Length Dim contentLength As String = myFileWebRequest.ContentLength.ToString() Console.WriteLine(ControlChars.Lf + "The content length is {0}.", contentLength) [C#] // Set the ContentLength property. myFileWebRequest.ContentLength=byteArray.Length; string contentLength = myFileWebRequest.ContentLength.ToString(); Console.WriteLine("\nThe content length is {0}.", contentLength); [C++] // Set the ContentLength property. myFileWebRequest->ContentLength=byteArray->Length; String* contentLength = myFileWebRequest->ContentLength.ToString(); Console::WriteLine(S"\nThe content length is {0}.", contentLength);
二、
获取响应正文的大小(以字节为单位)。
lBytes = Response.ContentLength返回值
lBytes As Long:表示响应正文的大小(以字节为单位)。
备注
ContentLength 属性度量存储响应正文的缓冲区中所用的空间大小。
如果为 Request.ResponseBufferSize 属性设置的值小于 HTTP 响应正文的大小,则 ContentLength 属性将等于 ResponseBufferSize 属性。它将小于响应正文的实际大小。
请求较大的文件时,请确保缓冲区足以容纳响应正文。如果不需要访问正文并希望使用由 Web 服务器设置的 Content-Length HTTP 头,则可将 Request.ResponseBufferSize 属性设置为零以提高性能。
注意,Response.BytesRecv 属性的值通常比 Response.ContentLength 和 Response.HeaderSize 两个属性值的总和大两个字节。BytesRecv 属性包括两个用于回车和分割消息头与正文的换行符的字节。
''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Procedure to calculate and log the size of the HTTP ' response message. Values determined from measuring the ' response data are compared to the value sent in the HTTP ' Content-Length header field. ' Sub LogResponseSizeInfo(oResponse) Dim lMessageSize Dim strMessage If (oResponse Is Nothing) Then Call Test.Trace("Error: invalid request or host not found ") Else lMessageSize = oResponse.ContentLength + oResponse.HeaderSize strMessage = "Response message information --------" & vbCrLf strMessage = strMessage & "Body size, from Content-Length: " & _ CStr(oResponse.ContentLength) & vbCrLf strMessage = strMessage & "Measured header size: " & _ CStr(oResponse.HeaderSize) & vbCrLf strMessage = strMessage & "Sum of content length and header size: " _ & CStr(lMessageSize) & vbCrLf strMessage = strMessage & "Measured bytes received: " & _ CStr(oResponse.BytesRecv) & vbCrLf Call Test.Trace(strMessage) End If End Sub三、获取或设置用于存储 Web 服务器响应的缓冲区大小。
lBufferSize = Request.ResponseBufferSize [= lBufferSize]返回值
lBufferSize As Long:表示存储服务器响应的缓冲区大小(以字节为单位)。默认值为 8192 字节。
备注
缓冲区表示用于存储响应正文的总内存量。如果响应正文的大小超过缓冲区的大小,ACT 将不存储剩余部分。Response.Body 属性仅返回缓冲区的内容,其中包含的响应消息正文可能不完整。
将 ResponseBufferSize 值设置为 0 可以稍微改善性能,但无法访问响应正文的任何部分。在这种情况下,Response.Body 命令将返回空字符串。
示例
''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Procedure to test the effect of using different ' response buffer sizes. ' Sub TestBufferedTTLB Dim lCount, oConnection, oRequest, oResponse Dim strServer strServer = "localhost" Set oConnection = Test.CreateConnection(strServer) ' check for connection errors If (oConnection Is Nothing) Then Call Test.Trace("Error: Unable to create connection.") Else Set oRequest = Test.CreateRequest oRequest.Path = "/large.asp" For lCount = 0 to 2000 Step 500 oRequest.ResponseBufferSize = lCount Set oResponse = oConnection.Send(oRequest) If (oResponse Is Nothing) Then Call Test.Trace("Error: invalid request or host not found ") Else Call Test.Trace("Buffer=" & CStr(lCount) & ", TTLB=" & CStr(oResponse.TTLB)) End If Next Call oConnection.Close() End If End Sub四、一个使用该属性作为文件大小的例子(華版)
以前要在ASP里上载文件真的要写一大堆程序。。。比如说把文件分段转换成Base64然后才上载到服务器,而在服务器那边由要从Base64转会原本的byte值才可以分段写如文件中。但是在ASP.NET里就完全只需用一行代码加一个HtmlInputFile控件就能做完这些复杂的程序。
而要注意的就是紧记在包含HtmlInputFile控件的Form里多添加一个enctype的属性,enctype="multipart/form-data";然后再用HtmlInputFile控件里的PostedFile.SaveAs方法来上载文件就可以了。
<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
</form>
'声明变量
Dim filename As String
Dim data() As String
Try
'检查所选文件大小
If PostFileName.PostedFile.ContentLength = 0 Then
'显示上载结果
Label3.Text = "上载失败!"
Else
'显示所选文件资料
Label2.Text = "文件大小:" & PostFileName.PostedFile.ContentLength & " bytes<br>"
Label2.Text = Label2.Text & "文件类型:" & PostFileName.PostedFile.ContentType & "<br>"
Label2.Text = Label2.Text & "文件名称:" & PostFileName.PostedFile.FileName & "<br>"
'读取文件名称
data = Split(PostFileName.PostedFile.FileName, "\")
'上载文件到服务器
PostFileName.PostedFile.SaveAs(Server.MapPath(".") & "\" & data(UBound(data)))
'显示上载结果
With Label3
.Text = "上载成功!"
.ForeColor = Color.DarkGreen
End With
End If
Catch ex As Exception
'显示错误讯息
With Label3
.Text = "Error: " & ex.Message
.ForeColor = Color.Red
End With
End Try
整体来说,最为麻烦的也不过是要从PostedFile.FileName里读取真整的文件名称(不包括括file path);不过这也大可用以下的简短代码来完成。
'读取文件名称
data = Split(PostFileName.PostedFile.FileName, "\")
'文件名称
Debug.Print data(UBound(data))
如果要上载多个文件(为可更有效的重用代码),那可以用Request.File来读取每一个所选的文件名称;就如以下的代码。
'声明变量
Dim lIndex As Integer
Dim lCount As Integer
Dim hpf As HttpPostedFile
Dim filename As String
Dim data() As String
Try
'读取所有要上载文件的数目
lCount = Request.Files.Count
'读取每一个上载文件的资料
For lIndex = 0 To lCount - 1
'读取第N个上载文件的资料
hpf = Request.Files(lIndex)
'检查所选文件大小
If hpf.ContentLength = 0 Then
'显示所选文件资料
Label2.Text = Label2.Text & "<br>" & "文件大小:" & hpf.ContentLength & " bytes<br>"
Label2.Text = Label2.Text & "文件类型:" & hpf.ContentType & "<br>"
Label2.Text = Label2.Text & "文件名称:" & hpf.FileName & "<br>"
'读取文件名称
data = Split(hpf.FileName, "\")
'上载文件到服务器
PostFileName.PostedFile.SaveAs(Server.MapPath(".") & "\" & data(UBound(data)))
'显示上载结果
With Label3
.Text = "上载成功!"
.ForeColor = Color.DarkGreen
End With
End If
'释放资源
hpf = Nothing
Next
Catch ex As Exception
'显示错误讯息
With Label3
.Text = "Error: " & ex.Message
.ForeColor = Color.Red
End With
End Try