做过http上传下载的人进来看看 我做了个网络资源管理.上传后的文件 我保存在了我项目中的一个文件夹中. 但是我有可能上传几G的文件 这样我的整个项目就很大了 老大刚才提到一个什么虚拟目录映射还是什么 就是项目和上传的文件夹路径分开请问是如何的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网站内容越来越多,可是磁盘空间却是有限的,当我们在IIS服务器上添加了新的硬盘,并将新的硬盘作为原有网站的一部分使用时,就得使用虚拟目录。虚拟目录可以在不影响现有网站的情况下,实现服务器磁盘空间的扩展,而且,虚拟目录可以与原有网站不在同一个文件夹,不在同一个磁盘驱动器,甚至不在同一台计算机上,但用户在访问网站时,却感觉不到任何区别。 就是在IIS中建立一个虚拟目录,然后将这个虚拟目录的属性,设置为实际想要保存文件的路径 具体一点呢?是不是要将我项目中的那个保存资源的文件夹指向整个虚拟目录?我是这么理解的 听了前面2位前辈的介绍 刚转WEB不久 见笑了 上传几G的文件你可以放一个独立的服务器存储这些东西断点续传断点续传using System;using System.Collections.Generic;using System.Text;using System.Collections.Specialized;using System.Net;using System.Net.Sockets;using System.IO;namespace CompleteClient{ /// <summary> /// 文件发送工作类 /// </summary> class PostFile { /// <summary> /// 通过post发送指定文件的指定字段到指定的uri上 /// </summary> /// <param name="uploadfile">上传文件路径</param> /// <param name="url">上传的到的URi位置</param> /// <param name="offset">当前偏移量</param> /// <param name="size">需要发送的块大小</param> /// <param name="fileFormName">服务器端"GET"取得的文件名</param> /// <param name="contenttype">文件类型(保留用)</param> /// <param name="querystring">GET数组(供服务器用GET取得一些信息)</param> /// <param name="cookies">本地cookies(保留用)</param> /// <returns>uri的response的内容以string的形式返回</returns> public string UploadFileEx(string uploadfile, string url, long offset, long size, string fileFormName, string contenttype, NameValueCollection querystring, CookieContainer cookies) { if ((fileFormName == null) || (fileFormName.Length == 0)) { fileFormName = "file"; } if ((contenttype == null) || (contenttype.Length == 0)) { contenttype = "application/octet-stream"; } string postdata; postdata = "?"; if (querystring != null) { foreach (string key in querystring.Keys) { postdata += key + "=" + querystring.Get(key) + "&"; } } Uri uri = new Uri(url + postdata); string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); webrequest.CookieContainer = cookies; webrequest.ContentType = "multipart/form-data; boundary=" + boundary; webrequest.Method = "POST"; // 构造一个post请求的http头 StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append(fileFormName); sb.Append("\"; filename=\""); sb.Append(Path.GetFileName(uploadfile)); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append(contenttype); sb.Append("\r\n"); sb.Append("\r\n"); string postHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); // Build the trailing boundary string as a byte array // ensuring the boundary appears on a line by itself byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read); long length = postHeaderBytes.Length + (long)size + boundaryBytes.Length; webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream(); // 写入post头 requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); // 写入文件内容 byte[] buffer = new Byte[size]; fileStream.Seek(offset, SeekOrigin.Current); fileStream.Read(buffer, 0, buffer.Length); requestStream.Write(buffer, 0, buffer.Length); // 写入post请求的尾 requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); //读取服务器的反馈消息 WebResponse responce = webrequest.GetResponse(); Stream s = responce.GetResponseStream(); StreamReader sr = new StreamReader(s); return sr.ReadToEnd(); } }} IIS中可以创建虚拟目录,这个目录可以指向另外一个磁盘的,或者另外一个文件夹。在用户上传文件的时候,点击完确定可以将文件保存到新的虚拟目录中去。你可以在你得站点下创建一个虚拟目录,上传的时候可以通过虚拟目录指向物理地址,从而将文件存到另一个磁盘中去。比如你得站点:abc站点,地址是:127.0.0.1,可以直接访问。虚拟目录:就是abc站点下创建的abc/file/。虚拟目录访问方法:127.0.0.1/file/ 这个就是你得虚拟目录。 有点晕 是这样的 我现在已经将我的项目发布到了IIS 名称就叫WEB 右键 新建虚拟目录之后 我取一个名字叫upload 然后指向哪里??我的项目在E盘 我现在指向的是D盘 指向完之后 接下来? 看下面的图 我的系统Windows 2003 + IIS6 //上传文件 public void FN_UpFiles() { //遍历File表单元素 HttpFileCollection files = HttpContext.Current.Request.Files; //StringBuilder strMsg = new StringBuilder(); //strMsg.Append("上传的文件分别是:<hr color='pink'/>"); try { for (int iFile = 0 ; iFile < files.Count ; iFile++) { //检查文件扩展名字 HttpPostedFile postedFile = files[iFile]; string fileName = ""; //string fileExtension = ""; fileName = Path.GetFileName(postedFile.FileName); if (fileName != "") { try { string strpath = HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName; if (System.IO.File.Exists(strpath)) { Response.Write("文件已经存在!" + fileName); } else { try { NRModel.File model = new NRModel.File(); NRBLL.File bf = new NRBLL.File(); Guid guid1 = Guid.NewGuid(); Guid guid2 = Guid.NewGuid(); Guid guid3 = Guid.NewGuid(); Guid guid4 = Guid.NewGuid(); model.Fileid = guid1; model.Folderid = guid2; model.Filepath = strpath; model.FileNam = fileName.ToString(); model.FileSize = postedFile.ContentLength; model.Decription = this.decrition.Value; model.CreateOn = DateTime.Now; model.CreateBy = guid3; model.ModefyBy = guid4; if (bf.FN_AddNewRes(model) > 0) { //fileExtension = Path.GetExtension(fileName); //strMsg.Append("上传的文件类型:" + postedFile.ContentType.ToString() + "<br>"); //strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>"); //strMsg.Append("上传文件的文件名:" + fileName + "<br>"); //strMsg.Append("上传文件的扩展名:" + fileExtension + "<br>"); //strMsg.Append("上传文件的大小:" + postedFile.ContentLength.ToString() + "个字节" + "<br>"); postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName); Page.RegisterStartupScript("提示", "<script language='javascript'>alert('上传成功!')</script>"); Response.Write("<script language='javascript'>self.opener.location.reload();</script>"); Response.Write("<script language='javascript'>window.close();</script>"); } } catch (Exception ex) { Response.Write(ex.ToString()); } } } catch (Exception ex) { Response.Write(ex.ToString()); } } else { Response.Write("文件不能为空!"); } } //strStatus.Text = strMsg.ToString(); } catch (System.Exception ex) { Response.Write(ex.ToString()); } } postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName);这一段就是保存文件到这个文件夹下.是不是得去掉这个?才能保存到我的虚拟路径 string strpath = HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName;你新建的虚拟目录是叫“ResourcesFolder”吗?若不是,请修改为虚拟目录的名称 比如你按上面图片的步骤建了一个虚拟目录叫“resource”,那么你必须这样做:string strpath = HttpContext.Current.Request.MapPath("~/resource/") + fileName;以表明你想保存到“resource”文件夹中,不然肯定还在原来的文件夹里面了。 js __doPostBack('LinkButton1', '') 调用后台方法 谢谢 好看好用的验证码控件 ASP。NET 注册 关于XML解析出错的问题,测试了很久都没找出错在那,在线等待 【【【DataGrid的一个小问题,最后20分了】】】 远程访问一个站点(.net开发)的登陆页面,输入用户名和密码后,点击确定后,页面关闭,为什么? 怎么样得到应用程序的跟目录 IE字体问题。。。头疼。。。 .NET跳转问题 网站为何会很慢? ASP.NET初学者 与SQLHELPER问题 求一个像“XX同城”里面的城市排列方式
虚拟目录可以在不影响现有网站的情况下,实现服务器磁盘空间的扩展,而且,虚拟目录可以与原有网站不在同一个文件夹,不在同一个磁盘驱动器,甚至不在同一台计算机上,但用户在访问网站时,却感觉不到任何区别。
断点续传
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace CompleteClient
{
/// <summary>
/// 文件发送工作类
/// </summary>
class PostFile
{
/// <summary>
/// 通过post发送指定文件的指定字段到指定的uri上
/// </summary>
/// <param name="uploadfile">上传文件路径</param>
/// <param name="url">上传的到的URi位置</param>
/// <param name="offset">当前偏移量</param>
/// <param name="size">需要发送的块大小</param>
/// <param name="fileFormName">服务器端"GET"取得的文件名</param>
/// <param name="contenttype">文件类型(保留用)</param>
/// <param name="querystring">GET数组(供服务器用GET取得一些信息)</param>
/// <param name="cookies">本地cookies(保留用)</param>
/// <returns>uri的response的内容以string的形式返回</returns>
public string UploadFileEx(string uploadfile, string url, long offset, long size,
string fileFormName, string contenttype,
NameValueCollection querystring, CookieContainer cookies)
{
if ((fileFormName == null) ||
(fileFormName.Length == 0))
{
fileFormName = "file";
} if ((contenttype == null) ||
(contenttype.Length == 0))
{
contenttype = "application/octet-stream";
} string postdata;
postdata = "?";
if (querystring != null)
{
foreach (string key in querystring.Keys)
{
postdata += key + "=" + querystring.Get(key) + "&";
}
}
Uri uri = new Uri(url + postdata); string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.CookieContainer = cookies;
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST"; // 构造一个post请求的http头
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(uploadfile));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n"); string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); // Build the trailing boundary string as a byte array
// ensuring the boundary appears on a line by itself
byte[] boundaryBytes =
Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(uploadfile,
FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + (long)size +
boundaryBytes.Length;
webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream();
// 写入post头
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); // 写入文件内容
byte[] buffer = new Byte[size];
fileStream.Seek(offset, SeekOrigin.Current);
fileStream.Read(buffer, 0, buffer.Length); requestStream.Write(buffer, 0, buffer.Length); // 写入post请求的尾
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
//读取服务器的反馈消息
WebResponse responce = webrequest.GetResponse();
Stream s = responce.GetResponseStream();
StreamReader sr = new StreamReader(s); return sr.ReadToEnd();
}
}
}
在用户上传文件的时候,点击完确定可以将文件保存到新的虚拟目录中去。
你可以在你得站点下创建一个虚拟目录,上传的时候可以通过虚拟目录指向物理地址,从而将文件存到另一个磁盘中去。
比如你得站点:abc站点,地址是:127.0.0.1,可以直接访问。
虚拟目录:就是abc站点下创建的abc/file/。
虚拟目录访问方法:127.0.0.1/file/ 这个就是你得虚拟目录。
public void FN_UpFiles()
{
//遍历File表单元素
HttpFileCollection files = HttpContext.Current.Request.Files;
//StringBuilder strMsg = new StringBuilder();
//strMsg.Append("上传的文件分别是:<hr color='pink'/>");
try
{
for (int iFile = 0 ; iFile < files.Count ; iFile++)
{
//检查文件扩展名字
HttpPostedFile postedFile = files[iFile];
string fileName = "";
//string fileExtension = "";
fileName = Path.GetFileName(postedFile.FileName);
if (fileName != "")
{
try
{
string strpath = HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName;
if (System.IO.File.Exists(strpath))
{
Response.Write("文件已经存在!" + fileName); }
else
{
try
{
NRModel.File model = new NRModel.File();
NRBLL.File bf = new NRBLL.File();
Guid guid1 = Guid.NewGuid();
Guid guid2 = Guid.NewGuid();
Guid guid3 = Guid.NewGuid();
Guid guid4 = Guid.NewGuid();
model.Fileid = guid1;
model.Folderid = guid2;
model.Filepath = strpath;
model.FileNam = fileName.ToString();
model.FileSize = postedFile.ContentLength;
model.Decription = this.decrition.Value;
model.CreateOn = DateTime.Now;
model.CreateBy = guid3;
model.ModefyBy = guid4;
if (bf.FN_AddNewRes(model) > 0)
{
//fileExtension = Path.GetExtension(fileName);
//strMsg.Append("上传的文件类型:" + postedFile.ContentType.ToString() + "<br>");
//strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>");
//strMsg.Append("上传文件的文件名:" + fileName + "<br>");
//strMsg.Append("上传文件的扩展名:" + fileExtension + "<br>");
//strMsg.Append("上传文件的大小:" + postedFile.ContentLength.ToString() + "个字节" + "<br>");
postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("~/ResourcesFolder/") + fileName);
Page.RegisterStartupScript("提示", "<script language='javascript'>alert('上传成功!')</script>");
Response.Write("<script language='javascript'>self.opener.location.reload();</script>");
Response.Write("<script language='javascript'>window.close();</script>");
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
} } }
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
else
{
Response.Write("文件不能为空!");
}
}
//strStatus.Text = strMsg.ToString();
}
catch (System.Exception ex)
{
Response.Write(ex.ToString());
}
}
这一段就是保存文件到这个文件夹下.是不是得去掉这个?才能保存到我的虚拟路径
以表明你想保存到“resource”文件夹中,不然肯定还在原来的文件夹里面了。