❶ 從網路下載文件的原理和過程是什麼
學過電腦的人都應該知道,其實就是一種代碼的轉換 計算機是由010101100101011010字元組成的,但通過軟體或是系統,當我們肉眼看到就是已經轉換好的了, 二進制是計算機最基本的 還有十進制 十六進制等等 下載的原理很簡單,在數據交換的時候就是通過010100101010來存入緩存,然後組成數字,字元,從而整合成肉眼能看到的文件
記得採納啊
❷ 如何實現在網站的文件上傳和下載功能
呵呵, ASP的到JAVA來問啦.
-------給你引用一段。
文件的上傳下載是我們在實際項目開發過程中經常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括:
1、如何解決文件上傳大小的限制
2、以文件形式保存到伺服器
3、轉換成二進制位元組流保存到資料庫以及下載方法
4、上傳Internet上的資源
第一部分:
首先我們來說一下如何解決ASP.NET中的文件上傳大小限制的問題,我們知道在默認情況下ASP.NET的文件上傳大小限制為2M,一般情況下,我們可以採用更改WEB.Config文件來自定義最大文件大小,如下:
<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>這樣上傳文件的最大值就變成了4M,但這樣並不能讓我們無限的擴大MaxRequestLength的值,因為ASP.NET會將全部文件載入內存後,再加以處理。解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數據。實現方法如下:
IServiceProviderprovider=(IServiceProvider)HttpContext.Current;
HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
byte[]bs=wr.GetPreloadedEntityBody();
.
if(!wr.IsEntireEntityBodyIsPreloaded())
{
intn=1024;
byte[]bs2=newbyte[n];
while(wr.ReadEntityBody(bs2,n)>0)
{
..
}
}這樣就可以解決了大文件的上傳問題了。
第二部分:
下面我們來介紹如何以文件形式將客戶端的一個文件上傳到伺服器並返回上傳文件的一些基本信息
首先我們定義一個類,用來存儲上傳的文件的信息(返回時需要)。
public class FileUpLoad
{
public FileUpLoad()
{
}
/**//// <summary>
/// 上傳文件名稱
/// </summary>
public string FileName
{
get
{
return fileName;
}
set
{
fileName = value;
}
}
private string fileName;
/**//// <summary>
/// 上傳文件路徑
/// </summary>
public string FilePath
{
get
{
return filepath;
}
set
{
filepath = value;
}
}
private string filepath;
/**//// <summary>
/// 文件擴展名
/// </summary>
public string FileExtension
{
get
{
return fileExtension;
}
set
{
fileExtension = value;
}
}
private string fileExtension;
}
另外我們還可以在配置文件中限制上傳文件的格式(App.Config):
<?xml version="1.0" encoding="gb2312" ?>
<Application>
<FileUpLoad>
<Format>.jpg|.gif|.png|.bmp</Format>
</FileUpLoad>
</Application>
這樣我們就可以開始寫我們的上傳文件的方法了,如下:
public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)
{
FileUpLoad fp = new FileUpLoad();
string fileName,fileExtension;
string saveName;
//
//建立上傳對象
//
HttpPostedFile postedFile = InputFile.PostedFile;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
fileExtension = System.IO.Path.GetExtension(fileName);
//
//根據類型確定文件格式
//
AppConfig app = new AppConfig();
string format = app.GetPath("FileUpLoad/Format");
//
//如果格式都不符合則返回
//
if(format.IndexOf(fileExtension)==-1)
{
throw new ApplicationException("上傳數據格式不合法");
}
//
//根據日期和隨機數生成隨機的文件名
//
if(myfileName != string.Empty)
{
fileName = myfileName;
}
if(isRandom)
{
Random objRand = new Random();
System.DateTime date = DateTime.Now;
//生成隨機文件名
saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()
+ date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);
fileName = saveName + fileExtension;
}
string phyPath = HttpContext.Current.Request.MapPath(filePath);
//判斷路徑是否存在,若不存在則創建路徑
DirectoryInfo upDir = new DirectoryInfo(phyPath);
if(!upDir.Exists)
{
upDir.Create();
}
//
//保存文件
//
try
{
postedFile.SaveAs(phyPath + fileName);
fp.FilePath = filePath + fileName;
fp.FileExtension = fileExtension;
fp.FileName = fileName;
}
catch
{
throw new ApplicationException("上傳失敗!");
}
//返回上傳文件的信息
return fp;
}
然後我們在上傳文件的時候就可以調用這個方法了,將返回的文件信息保存到資料庫中,至於下載,就直接打開那個路徑就OK了。
第三部分:
這里我們主要說一下如何以二進制的形式上傳文件以及下載。首先說上傳,方法如下:
public byte[] UpLoadFile(HtmlInputFile f_IFile)
{
//獲取由客戶端指定的上傳文件的訪問
HttpPostedFile upFile=f_IFile.PostedFile;
//得到上傳文件的長度
int upFileLength=upFile.ContentLength;
//得到上傳文件的客戶端MIME類型
string contentType = upFile.ContentType;
byte[] FileArray=new Byte[upFileLength];
Stream fileStream=upFile.InputStream;
fileStream.Read(FileArray,0,upFileLength);
return FileArray;
}
這個方法返回的就是上傳的文件的二進制位元組流,這樣我們就可以將它保存到資料庫了。下面說一下這種形式的下載,也許你會想到這種方式的下載就是新建一個aspx頁面,然後在它的Page_Load()事件里取出二進制位元組流,然後再讀出來就可以了,其實這種方法是不可取的,在實際的運用中也許會出現無法打開某站點的錯誤,我一般採用下面的方法:
首先,在Web.config中加入:
<add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
這表示我打開openfile.aspx這個頁面時,系統就會自動轉到執行RuixinOA.Web.BaseClass.OpenFile 這個類里的方法,具體實現如下:
using System;
using System.Data;
using System.Web;
using System.IO;
using Ruixin.WorkFlowDB;
using RXSuite.Base;
using RXSuite.Component;
using RuixinOA.BusinessFacade;
namespace RuixinOA.Web.BaseClass
{
/**//// <summary>
/// NetUFile 的摘要說明。
/// </summary>
public class OpenFile : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//從資料庫中取出要下載的文件信息
RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();
EntityData data = os.GetFileDetail(id);
if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)
{
DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ContentType = dr["CContentType"].ToString();
context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
context.Response.BinaryWrite((Byte[])dr["CContent"]);
context.Response.Flush();
context.Response.End();
}
}
public bool IsReusable
{
get { return true;}
}
}
}
執行上面的方法後,系統會提示用戶選擇直接打開還是下載。這一部分我們就說到這里。
第四部分:
這一部分主要說如何上傳一個Internet上的資源到伺服器。前面我們有一篇文章詳細介紹了使用方法,這里我不再多說。
請參考:將動態頁面轉化成二進制位元組流
第五部分:總結
今天簡單的介紹了幾種文件上傳與下載的方法,都是在實際的項目開發中經常需要用到的,可能還有不完善的地方,希望大家可以互相交流一下項目開發中的經驗。寫的不好的地方,請指正,謝謝!
❸ 網路下載是怎麼實現的
WEB下載方式分為HTTP與FTP兩種類型,它們分別是Hyper Text Transportation Protocol(超文本傳輸協議)與File Transportation Protocol(文件傳輸協議)的縮寫,它們是計算機之間交換數據的方式,也是兩種最經典的下載方式,該下載方式原理非常簡單,就是用戶兩種規則(協議)和提供文件的伺服器取得聯系並將文件搬到自己的計算機中來,從而實現下載的功能。 BT下載實際上就是P2P下載,該種下載方式與WEB方式正好相反,該種模式不需要伺服器,而是在用戶機與用戶機之間進行傳播,也可以說每台用戶機都是伺服器,講究"人人平等"的下載模式,每台用戶機在自己下載其它用戶機上文件的同時,還提供被其它用戶機下載的作用,所以使用該種下載方式的用戶越多,其下載速度就會越快。其工作原理圖如圖2所示。 P2SP下載方式實際上是對P2P技術的進一步延伸,它不但支持P2P技術,同時還通過多媒體檢索資料庫這個橋梁把原本孤立的伺服器資源和P2P資源整合到了一起,這樣下載速度更快,同時下載資源更豐富,下載穩定性更強。
❹ 如何讓區域網的網站具有下載功能就是直接區域網其他機器通過IP和文件名字就可以下載文件
您好,您所問的是在區域網內共享文件,只要把文件放到共享文件夾里,區域網內其他主機就能進行下載。設置如下:
控制面板→管理工具→本地安全策略→本地策略→安全選項,右邊找到「網路訪問: 不允許 SAM 帳戶和共享的匿名枚舉」這個禁用,
「網路訪問: 本地帳戶的共享和安全模型」選僅來賓,還有最下邊的「賬戶:來賓賬戶狀態」要啟用,以及「帳戶: 使用空白密碼的本地帳戶只允許進行控制台登錄」禁用。
然後切換到本地策略→用戶權利指派,右邊找到「拒絕從網路訪問這台計算機」,點擊去掉勾,裡面要是有guest,刪掉,沒有就算了。、
做完這些系統就開放共享了,但是要重啟一下電腦來確保設置生效。
重啟之後就是看要共享哪些文件夾了,右鍵點要共享的文件夾,選「共享與安全」就會看到相關選項。共享許可權很簡單,開了共享之後就剩下是否允許修改了,樓主自行設定。
登陸共享主機的方法是在運行裡面輸入「\\某某的電腦」或者是「\\192.168.1.2」(對方的IP地址),這只是例子,相應的計算機名或IP自行填寫。或者直接在網路鄰居里打開有共享文件的主機,就能調用對方放在共享文件夾里的文件
❺ 網頁中的下載文件是如何實現的
???把要下載的文件(以程序文件名)上傳到網站空間里,創建超鏈接指向該文件,點擊超鏈接時就會彈出下載對話框。
❻ 如何從Internet上有效而穩定地下載文件
為了使用這個函數,只需要提供一個有效的HINTERNET句柄,這個句柄可以通過標準的InternetOpen()掉用來獲 得。如果你願意的話,你還可以將一個句柄提供給進度窗口(ID為一靜態控制的標示符,用來顯示狀態 ),在這個函數的頭幾行代碼中聲明一些變數。DWORD dwSize;這個變數被用於存儲每次 調用InternetReadFile讀取了多少數據。CHAR szHead[] = "Accept: */*\r\n\r\n";用於存儲多個HTTP頭信息。如果在調用InternetOpenUrl時不傳遞著個頭信 息,則只允許你打開文本文件!VOID* szTemp[16384];緩沖變數,可以存儲來自 Internet的16KB的文件數據。HINTERNET hConnect;這是一個HINTERNET句柄,包含請求結果(來自InternetOpenUrl)FILE * pFile;標準的C文件句柄(必須包含stdio.h)。 如果你願意,可以使用Win32處理文件的APIif (!(hConnect = InternetOpenUrlA (hOpen, szUrl, szHead, lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0))){return INTERNET_ERROR_OPENURL; }此調用可以打開一個使用URL的Internet文件句柄。標 志表示這個文件總是被讀取,而不是緩存(cache)。如果失敗,則此函數返回錯誤,你可以給定 INTERNET_ERROR_OPENURL任何值。必須為這個函數定義所有的錯誤信息。也可以用一個數字替代。if(!(pFile = fopen(szFileName, "wb" ))){return INTERNET_ERROR_FILEOPEN; }此調用根據給定的文件名打開文件。如果失敗則返回 另一個用戶定義的錯誤。DWORD dwByteToRead = 0; DWORD dwSizeOfRq = 4; DWORD dwBytes = 0;這三個值分別存儲文件的大小,HttpQueryInfo內容的大小和總共 讀取的位元組數。if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL)){dwByteToRead = 0; }此調用可以獲得文件的大小。如果失敗則dwByteToRead被 置為0,並且當文件被下載時不會顯示百分比和總數DWORD start;DWORD end;DWORD time;time = 10;start = timeGetTime();使用這些bit必須包含mmsystem.h並鏈接winmm.lib,它們用於時間選擇,告訴用戶下載的速度。例子代碼只統計了下載速度,你可以擴展這個功能,比如估計還剩多少時間。do{if (! InternetReadFile(hConnect, szTemp, 16384, &dwSize)){fclose (pFile); return INTERNET_ERROR_READFILE; }此調用循環中,每次下載一個16KB的數據 塊。如果download請求失敗,則文件被關閉並返回錯誤。if (!dwSize)break;elsefwrite(szTemp, sizeof(char), dwSize, pFile);如果dwSize為0,則意味著一個EOF,循環退出。否則由InternetReadFile讀取的數據內容被寫到本地文件中。dwBytes+=dwSize; if(dwByteToRead && hwndProgress){SendDlgItemMessageA(hwndProgress, idProgressBar, WM_USER+2, (dwBytes*100)/dwByteToRead, 0); UpdateWindow(hwndProgress); }這個代碼中,dwBytes是從文件讀取的數據量,它不斷增加,如果文件長度是有效的,則進度窗口句柄被指定,進度條被更新已表示下載進度 。FLOAT fSpeed = 0; fSpeed = (float)dwBytes; fSpeed /= ((float) time)/1000.0f; fSpeed /= 1024.0f;這些bit代碼用於根據所花時間計算下載速度 和讀取的數據量。if(hwndProgress){char s[260]; sprintf(s, "%d KB / %d KB @ %1.1f KB/s", dwBytes/1024, dwByteToRead/1024, fSpeed); SetDlgItemTextA(hwndProgress, idStatusText, s); UpdateWindow(hwndProgress); } 設置和處理進度窗口的狀態文本,表示下載的文件大小和下載速度。end = timeGetTime(); time = end - start; if(time == 0)time = 10;時間被更 新} // dowhile (TRUE);循環結束fflush (pFile); fclose (pFile);return 0;}最後,函數結束,關閉文件並清除硬體驅動的緩沖。返回0表示成功。使用這個代碼段,按照本文所描述的那樣,你可以自己編寫一個程序來從 Internet上有效地、穩定地下載文件。實現細節請參見例子。
❼ 從web伺服器上下載文件是如何實現的
/**
*根據文件輸入流,和文件名稱下載文件
*@paramresp HttpServletResponse
*@paramfile 供下載的文件
*@paramfile_name 所顯示的下載文件名稱
*/
publicvoidFileDownLoad(HttpServletResponseresp,Filefile,Stringfile_name){
try{
StringfileName=newString(file_name.getBytes("GBK"),"ISO8859_1");
resp.setContentType("application;charset=utf-8"); //指定文件的保存類型。
resp.setHeader("Content-disposition","attachment;filename="+fileName);
ServletOutputStreamoupstream=resp.getOutputStream();
FileInputStreamfrom=newFileInputStream(file);
byte[]buffer=newbyte[catchSize];
intbytes_read;
while((bytes_read=from.read(buffer))!=-1){
oupstream.write(buffer,0,bytes_read);
}
oupstream.flush();
}catch(Exceptione){
}
}
這個是伺服器端文件下載工具類 題主可以試試,望採納
❽ 5G天翼雲盤如何通過5G網路下載文件
第一步:在5G網路下,選擇用戶需要下載的文件,點擊右側「」。
第二步:點擊「高速下載」。
5G天翼雲盤在5G網路下當檢測到網路變化時,傳輸列表會的傳輸任務會出現5G標識。
以上信息僅供參考,全城千兆,C位出道。5G雙千兆套餐,1000M寬頻,60G流量全家共享,詳情可登錄廣西電信網上營業廳查看。客服156號為你解答。
http://wx8102.gstai.com/UrlDispenseApp/index.php
❾ 如何在網站上實現下載文件的功能
你懂網站代碼編輯嗎?只要在代碼中你的連接地址里寫一個.exe
或.rar
.zip
.doc結尾的,別人點擊該連接就自動會下載了