當前位置:首頁 » 文件管理 » asp大文件上傳

asp大文件上傳

發布時間: 2022-12-13 04:21:37

1. 怎麼修改asp文件上傳大小限制

你好方法如下:
asp上傳大小限制iis中默認為200K,下面是修改asp上傳大小限制詳細步驟
1、以記事本方式打開c:\windows\system32\inetsrv\metabase.xml 2、把其中AspMaxRequestEntityAllowed="20480000"
即添加兩個0(把ASP上傳文件大小限制從200K改為20M)。編輯好保存完最好重啟下iis服務! 3、重啟iis方法:開始--運行--輸入cmd回車--輸入iisreset豈可重啟iis 或者你也可以進開始--管理工具--服務--最下面有個World Wide Web Publishing Service的服務重啟即可 注意:如果metabase.xml修改後想保存但是提示無法編輯,不能保存!這是由於你沒有在iis中啟用「允許直接編輯配置資料庫」的功能。
希望能幫到你。

2. asp.net用多線程上傳大文件(500MB~2G)

眾所周知,如果需要向WEB伺服器上傳文件,一般選用下列2種方式。

1. 使用HTTP PUT指令

2. 模擬頁面的form提交

第一種需要配置伺服器,略過。

第二種需要使用WinInet根據HTTP協議,拼除POST BODY後提交。

對於第二種,在ASP.Net裡面特麻煩。

1. 需要模擬頁面的VIEWSTATE,模擬不成功就不行

2. ASP.Net對每個請求有最大長度限制,這個值默認為4MB,但可以在web.config中修改

3. 文件在上傳過程中並沒有直接寫入磁碟,而是先放入了內存,等到全部上傳結束再寫入磁碟。所以如果傳輸超大的文件對伺服器性能影響很大

本文的做法是:

客戶端不需要模擬form,將大文件分成等大的小塊(如64K),使用多線程將這些小塊上傳到伺服器後,伺服器再拼合起來。

---------------------------------------------------------

流程:

1. 客戶端:需要向伺服器上傳一個文件,首先調用伺服器的某一個頁面(如BeginUpload.aspx),通知此文件的大小(bytes)

2.伺服器:伺服器收到此請求,首先驗證客戶端許可權,然後在自定義的文件夾中按照請求中提供的大小創建一個空文件,並返回一個唯一標示碼到客戶端。

3.客戶端:收到伺服器返回成功後,記錄下此次上傳的唯一標識碼。

4.客戶端:將需要上傳的這個文件分成大小相等的文件塊(如64K)。(這個過程只是一個邏輯上的過程,實際的做法並不需要分塊,可以直接使用內存映射文件或者將文件直接讀入到虛擬內存以加快速度)

5.客戶端:開啟一個領導者-跟隨者線程池。領導者線程負責要上傳文件塊的調度,而跟隨者線程負責自己分配到的文件塊上傳。

6.客戶端,跟隨者線程:讀取自己分配到的文件塊,向伺服器的特定路徑或者頁面POST文件內容。

這個POST的HEADER或者QueryString裡面起碼要包含這幾個參數:唯一標識碼、當前文件塊的區間。

7.服務端:收到跟隨者線程的請求,以共享方式打開臨時文件夾中的文件,寫入當前文件塊。

8.客戶端,領導者線程:檢測到文件塊全部上傳完畢,則向伺服器某一個頁面報告(如EndUpload.aspx),此文件上傳結束,清理資源。

9.伺服器:收到文件上傳結束的通知,將文件從臨時文件夾移動到需要的位置。

10. 伺服器周期性地清理臨時文件夾中的過期文件。

----------------------------------------------------------------

上面的流程是多線程分塊並行上傳的基本流程。也可以在此基礎上進一步加入CRC32驗證文件完整性的功能。如果要簡化流程,不需要分塊上傳,只需要直接進行第6步操作就可以了。

對於第6部,在服務端,可以使用一個*.aspx頁面或者一個IHttpHandler來處理請求。

參考下列代碼,參數以及其它部分都已經略掉。

protected void Page_Load(object sender, EventArgs e)
{
Stream stream = Page.Request.InputStream;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
// TO DO: Something else
}
protected void Page_Load(object sender, EventArgs e)
{
Stream stream = Page.Request.InputStream;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
// TO DO: Something else
}

對於其它B/S平台,也是類似的方式。

客戶端代碼,我自己封裝了一下,這里只列出關鍵代碼。

view plain to clipboardprint?
void CHttpClient::OpenConnection( LPCTSTR lpszServer, UINT nPort)
{
CloseConnection();
m_hSession = ::InternetOpen( USER_AGENT
, INTERNET_OPEN_TYPE_PRECONFIG
, NULL
, NULL
, 0
);
if( !m_hSession )
throw CCustomException(_T("Error: Failed to connect to the server, InternetOpen failed."));
m_hConnect = ::InternetConnect( m_hSession
, lpszServer
, nPort
, NULL
, NULL
, INTERNET_SERVICE_HTTP
, NULL
, NULL
);
if( !m_hConnect )
throw CCustomException(_T("Error: Failed to connect to the server, InternetConnect failed."));
}
void CHttpClient::CloseConnection(void)
{
if( m_hSession )
{
::InternetCloseHandle(m_hSession);
m_hSession = NULL;
}
if( m_hConnect )
{
::InternetCloseHandle(m_hConnect);
m_hConnect = NULL;
}
}
void CHttpClient::PostBuffer( LPCTSTR lpszPath, LPBYTE lpBuffer, DWORD dwSize)
{
ASSERT( m_hSession && m_hConnect );
HINTERNET hRequest = ::HttpOpenRequest( m_hConnect
, _T("POST")
, lpszPath
, NULL
, NULL
, NULL
, INTERNET_FLAG_NO_CACHE_WRITE
, 0
);
if(!hRequest)
throw CCustomException(_T("Error: Failed to POST data to server, HttpOpenRequest failed."));
INTERNET_BUFFERS stBuffers = {0};
stBuffers.dwStructSize = sizeof(stBuffers);
stBuffers.Next = NULL;
stBuffers.lpcszHeader = NULL;
stBuffers.dwHeadersLength = 0;
stBuffers.dwHeadersTotal = 0;
stBuffers.lpvBuffer = NULL;
stBuffers.dwBufferLength = 0;
stBuffers.dwBufferTotal = dwSize;
stBuffers.dwOffsetLow = 0;
stBuffers.dwOffsetHigh = 0;
BOOL bRet = ::HttpSendRequestEx( hRequest, &stBuffers, NULL, 0, 0);
if(!bRet)
{
::InternetCloseHandle(hRequest);
throw CCustomException(_T("Error: Failed to POST data to server, HttpSendRequestEx failed."));
}
DWORD dwSent = 0;
DWORD dwBytesWritten = 0;
while(dwSent < dwSize)
{
bRet = ::InternetWriteFile( hRequest
, (LPBYTE)(lpBuffer + dwSent)
, dwSize - dwSent
, &dwBytesWritten
);
if( bRet )
dwSent += dwBytesWritten;
}
bRet = ::HttpEndRequest(hRequest, NULL, 0, 0);
::InternetCloseHandle(hRequest);
if( !bRet )
throw CCustomException(_T("Error: Failed to POST data to server, HttpEndRequest failed."));
}
void CHttpClient::OpenConnection( LPCTSTR lpszServer, UINT nPort)
{
CloseConnection();
m_hSession = ::InternetOpen( USER_AGENT
, INTERNET_OPEN_TYPE_PRECONFIG
, NULL
, NULL
, 0
);
if( !m_hSession )
throw CCustomException(_T("Error: Failed to connect to the server, InternetOpen failed."));
m_hConnect = ::InternetConnect( m_hSession
, lpszServer
, nPort
, NULL
, NULL
, INTERNET_SERVICE_HTTP
, NULL
, NULL
);
if( !m_hConnect )
throw CCustomException(_T("Error: Failed to connect to the server, InternetConnect failed."));
}
void CHttpClient::CloseConnection(void)
{
if( m_hSession )
{
::InternetCloseHandle(m_hSession);
m_hSession = NULL;
}
if( m_hConnect )
{
::InternetCloseHandle(m_hConnect);
m_hConnect = NULL;
}
}
void CHttpClient::PostBuffer( LPCTSTR lpszPath, LPBYTE lpBuffer, DWORD dwSize)
{
ASSERT( m_hSession && m_hConnect );
HINTERNET hRequest = ::HttpOpenRequest( m_hConnect
, _T("POST")
, lpszPath
, NULL
, NULL
, NULL
, INTERNET_FLAG_NO_CACHE_WRITE
, 0
);
if(!hRequest)
throw CCustomException(_T("Error: Failed to POST data to server, HttpOpenRequest failed."));
INTERNET_BUFFERS stBuffers = {0};
stBuffers.dwStructSize = sizeof(stBuffers);
stBuffers.Next = NULL;
stBuffers.lpcszHeader = NULL;
stBuffers.dwHeadersLength = 0;
stBuffers.dwHeadersTotal = 0;
stBuffers.lpvBuffer = NULL;
stBuffers.dwBufferLength = 0;
stBuffers.dwBufferTotal = dwSize;
stBuffers.dwOffsetLow = 0;
stBuffers.dwOffsetHigh = 0;
BOOL bRet = ::HttpSendRequestEx( hRequest, &stBuffers, NULL, 0, 0);
if(!bRet)
{
::InternetCloseHandle(hRequest);
throw CCustomException(_T("Error: Failed to POST data to server, HttpSendRequestEx failed."));
}
DWORD dwSent = 0;
DWORD dwBytesWritten = 0;
while(dwSent < dwSize)
{
bRet = ::InternetWriteFile( hRequest
, (LPBYTE)(lpBuffer + dwSent)
, dwSize - dwSent
, &dwBytesWritten
);
if( bRet )
dwSent += dwBytesWritten;
}
bRet = ::HttpEndRequest(hRequest, NULL, 0, 0);
::InternetCloseHandle(hRequest);
if( !bRet )
throw CCustomException(_T("Error: Failed to POST data to server, HttpEndRequest failed."));
}

調用示例:

const int BUFFER_SIZE = 1024000;
CHttpClient oClient;
oClient.OpenConnection( _T("127.0.0.1"), 4638 );
BYTE * pBuffer = new BYTE[BUFFER_SIZE];
for (UINT i = 0; i < BUFFER_SIZE; i++)
{
pBuffer[i] = i%0xFF;
}
oClient.PostBuffer( _T("/1/Default.aspx"), pBuffer, BUFFER_SIZE);
delete [] pBuffer;
說實話,是復制的,我也是個.NET程序員,我看了一下這個代碼可以實現你的要求的哈!

3. asp上傳大文件問題

IIS6默認上傳的大小是多少來著?好像是2M,這是一個原因。
另外你的這個錯誤應該是404吧,找不到這個文件

無法顯示那就是404錯誤啊,還有個原因就是網路斷線了,但這里顯然不是這個原因。

4. ASP大文件上傳問題

原因有很多:
1 化境上傳貌似本來就不推薦傳大文件。
2 與你計算機的硬體速度有關,我剛用ASPUPLOAD做了一個上傳,伺服器配置是P4 1.5, 512MB內存,傳500MB以上的文件就會無響應了,後來換到一台P4 3.4,512內存的機器上就好了。

所以還是建議你換到一台好點的機器上試一下先。
或者用組件上傳吧,無組件上傳一般不適合上傳大文件的。

5. ASP.NET中上傳超大文件怎麼做

<!--
通過 <httpRuntime> 節可以配置 ASP.NET 使用的
上傳文件的上傳時間,從而實現超大文件上傳。
-->
<httpRuntime executionTimeout="36000" maxRequestLength="951200" useFullyQualifiedRedirectUrl="true" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />
在Web.config的system.web這里加上面這句;
我這是參考別人的,我也沒做過超大文件上傳,最多上傳個幾兆圖片什麼的

6. 如何解決ASP上傳大文件

ASP上傳大文件的效率並不是很好,不建議使用。可以找一些上傳的插件來用,Flash的有相關的源碼,同時你也可以搜索 「ASP帶進度條的無組件上傳」網上有很多相關的示例可參考。
希望對你有幫助 。

7. asp怎樣解決大文件上傳

ASP上傳大文件的效率並不是很好,不建議使用。可以找一些上傳的插件來用,Flash的有相關的源碼,同時你也可以搜索 「ASP帶進度條的無組件上傳」網上有很多相關的示例可參考。 希望對你有幫助 。

8. asp如何實現文件上傳功能

基本原理是:採用ADO Stream對象的BinaryRead方法將FORM中的所有數據讀出,從中截取出所需的文件數據,以二進制文件方式存檔。

下面是上傳文件頁面的一個例子:

<html>

<body>

<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">

<input type="file" name="FileName">

<INPUT TYPE="Submit" VALUE="Upload"></TD>

</form>

</body>

</html>

(8)asp大文件上傳擴展閱讀

幾種文件上傳技術的比較

1、基於HTTP協議

該方法需要編程者利用第三方軟體,如DELPHI、VB等,在應用程序中先進行HTTP協議編程,然後將待上傳文件內容按HTTP協議的格式打包,最後向WEB伺服器發送上傳的請求報文,從而實現文件的上傳。

因為DELPHI和VB不能編寫完整的WEB網路程序,只能編寫WEB小應用程序,因此,該方法只用於功能受限的網路應用。

2、基於VB(或DELPHI等)開發的文件上傳組件

該方法利用VB(或DELPHI等編程語言)開發ASP伺服器組件,實現特定的文件上傳服務。它首先利用ASP表單功能將文件(二進制格式)從用戶端上傳到伺服器端,然後使用VB開發的組件,對二進制文件進行處理,成為可以正常讀寫的文件。

該方法要求編程者不僅掌握ASP語言,而且還能利用VB等第三方語言進行組件編程,增加了開發的難度。

3、基於資料庫技術

該方法和上個方法有類似之處。不同的地方在於對上傳的二進制文件的處理上。它使用資料庫來保存二進制文件。無論是小型資料庫還是大型資料庫都提供了存儲二進制數據的數據類型,只要以Append Chunk方式將數據存入相應的欄位就可以了。

該方法雖然簡單可行,但是因為每次上傳的文件大小都是不一樣的,因此,會對資料庫的空間造成很大的浪費,降低了數據的訪問速度;並且使得文件只能在資料庫環境下進行訪問,造成了很大的不便。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1013
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:114
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:713