❶ 从网络下载文件的原理和过程是什么
学过电脑的人都应该知道,其实就是一种代码的转换 计算机是由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结尾的,别人点击该连接就自动会下载了