10 个解决方案
#1
什么叫搬到handler不好使,Page不也是Handler么,你还是说说详细问题
#2
一、aspx.cs里面
button的click事件中没问题
string strFileName = hfFileName.Value;//客户端保存的文件名
string strFilePath = Server.MapPath("../MediaLibrary/Big/");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(strFilePath + strFileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
二、一般处理程序Handler
通过ajax调用一般处理程序 下载不好用
public void ProcessRequest(HttpContext context)
{
string strResult = context.Server.MapPath("news.JPG"); ;
//以字符流的形式下载文件
FileStream fs = new FileStream(strResult, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("asdasd", System.Text.Encoding.UTF8));
context.Response.BinaryWrite(bytes);
context.Response.Flush();
}
#3
···· 两者没区别吧。 只是说一个没有你想触发就触发而已。
public static void TransferFile(string filepath)
{
// StreamWriter sw = new StreamWriter(@"E:/NDadmin/ndfile/2.txt", true, Encoding.UTF8);
try
{
FileStream filestream = new FileStream(filepath, FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
// sw.WriteLine("文件完成读取");
long filesize = filestream.Length;
// sw.WriteLine("查询大小完成");
//让客户端浏览器正确识别这个文件的类型和文件大小
string filename = System.IO.Path.GetFileName(filepath).ToLower();
// sw.WriteLine("识别大小完成");
HttpContext.Current.Response.ContentType = "application/octet-stream";
// sw.WriteLine("制定类型完成");
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + "\";");
// sw.WriteLine("文件位置制定完成");
HttpContext.Current.Response.AddHeader("Content-Length", filesize.ToString());
//sw.WriteLine("长度制定完成");
//将文件中的数据发送到客户端
byte[] filebuffer = new byte[filesize];
//sw.WriteLine("获取文件数据");
filestream.Read(filebuffer, 0, (int)filesize);
//sw.WriteLine("发送ING");
HttpContext.Current.Response.BinaryWrite(filebuffer);
//sw.WriteLine("发送完成");
filestream.Close();
//sw.WriteLine("释放");
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
throw ex;
//sw.WriteLine("报错了!" + ex.Message);
//sw.WriteLine("报错了!" + ex.TargetSite);
}
finally
{
// sw.Flush();
//sw.Close();
}
}
#4
楼主,什么叫不好用,你的handler的ProcessRequest能进去么,调试下仨
#5
1、我的图片信息显示在axpx页面中,页面有个html标签的button,并且添加了onclick事件
2、button的onclick事件里,通过ajax调用另一个一般处理程序handler并且传递了选中的图片ID
3、在一般处理程序handler里面可以得到传递过来的图片ID
我想让页面弹出另存为,把该图片保存到本地的一个路径下
2、button的onclick事件里,通过ajax调用另一个一般处理程序handler并且传递了选中的图片ID
3、在一般处理程序handler里面可以得到传递过来的图片ID
我想让页面弹出另存为,把该图片保存到本地的一个路径下
#6
上面的方法完成可以满足你。。。 TransferFile(Agreement.Down_path + theme.Totalpackage);
方法后面的参数是绝对路径。 代码上面有- - 你只需要把你的ID传过去 然后获取。
方法后面的参数是绝对路径。 代码上面有- - 你只需要把你的ID传过去 然后获取。
#7
我试了,调试通过,但是不弹出另存为那个框
#8
弹不出框么?
#9
。。 发下代码。 我这里迅雷都可以跑出来- - 。。
#10
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
context.Response.AddHeader("pragma", "no-cache");
context.Response.AddHeader("cache-control", "");
context.Response.CacheControl = "no-cache";
context.Response.Charset = "utf-8";
//接收来源页面URL参数
NameValueCollection oParams = context.Request.Params;
//返回页面的信息
string strResult = string.Empty;
//媒体库原图文件夹路径
string strMediaLibraryPath = context.Server.MapPath("../MediaLibrary/Big/");
//媒体库缩略图文件夹路径
string strThumbnailPath = context.Server.MapPath("../MediaLibrary/Small/");
switch (oParams["type"])
{
case "detail":
strResult = GetDetailList(strMediaLibraryPath);
break;
case "download":
TransferFile(strMediaLibraryPath+"news.jpg");
break; case "thumbnail":
strResult = GetThumbnailList(strMediaLibraryPath);
break;
case "delete":
if (oParams["filename"] == null)
{
strResult = Convert.ToInt32(MediaLibInfo.FileDeleteError).ToString();
break;
}
strResult = DeleteFile(strMediaLibraryPath, oParams["filename"].ToString());
DeleteThumbnail(strThumbnailPath, oParams["filename"].ToString());
break;
default:
break;
}
context.Response.Flush();
context.Response.Write(strResult);
context.Response.End();
}
{
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
context.Response.AddHeader("pragma", "no-cache");
context.Response.AddHeader("cache-control", "");
context.Response.CacheControl = "no-cache";
context.Response.Charset = "utf-8";
//接收来源页面URL参数
NameValueCollection oParams = context.Request.Params;
//返回页面的信息
string strResult = string.Empty;
//媒体库原图文件夹路径
string strMediaLibraryPath = context.Server.MapPath("../MediaLibrary/Big/");
//媒体库缩略图文件夹路径
string strThumbnailPath = context.Server.MapPath("../MediaLibrary/Small/");
switch (oParams["type"])
{
case "detail":
strResult = GetDetailList(strMediaLibraryPath);
break;
case "download":
TransferFile(strMediaLibraryPath+"news.jpg");
break; case "thumbnail":
strResult = GetThumbnailList(strMediaLibraryPath);
break;
case "delete":
if (oParams["filename"] == null)
{
strResult = Convert.ToInt32(MediaLibInfo.FileDeleteError).ToString();
break;
}
strResult = DeleteFile(strMediaLibraryPath, oParams["filename"].ToString());
DeleteThumbnail(strThumbnailPath, oParams["filename"].ToString());
break;
default:
break;
}
context.Response.Flush();
context.Response.Write(strResult);
context.Response.End();
}
#1
什么叫搬到handler不好使,Page不也是Handler么,你还是说说详细问题
#2
一、aspx.cs里面
button的click事件中没问题
string strFileName = hfFileName.Value;//客户端保存的文件名
string strFilePath = Server.MapPath("../MediaLibrary/Big/");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(strFilePath + strFileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
二、一般处理程序Handler
通过ajax调用一般处理程序 下载不好用
public void ProcessRequest(HttpContext context)
{
string strResult = context.Server.MapPath("news.JPG"); ;
//以字符流的形式下载文件
FileStream fs = new FileStream(strResult, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("asdasd", System.Text.Encoding.UTF8));
context.Response.BinaryWrite(bytes);
context.Response.Flush();
}
#3
···· 两者没区别吧。 只是说一个没有你想触发就触发而已。
public static void TransferFile(string filepath)
{
// StreamWriter sw = new StreamWriter(@"E:/NDadmin/ndfile/2.txt", true, Encoding.UTF8);
try
{
FileStream filestream = new FileStream(filepath, FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
// sw.WriteLine("文件完成读取");
long filesize = filestream.Length;
// sw.WriteLine("查询大小完成");
//让客户端浏览器正确识别这个文件的类型和文件大小
string filename = System.IO.Path.GetFileName(filepath).ToLower();
// sw.WriteLine("识别大小完成");
HttpContext.Current.Response.ContentType = "application/octet-stream";
// sw.WriteLine("制定类型完成");
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + "\";");
// sw.WriteLine("文件位置制定完成");
HttpContext.Current.Response.AddHeader("Content-Length", filesize.ToString());
//sw.WriteLine("长度制定完成");
//将文件中的数据发送到客户端
byte[] filebuffer = new byte[filesize];
//sw.WriteLine("获取文件数据");
filestream.Read(filebuffer, 0, (int)filesize);
//sw.WriteLine("发送ING");
HttpContext.Current.Response.BinaryWrite(filebuffer);
//sw.WriteLine("发送完成");
filestream.Close();
//sw.WriteLine("释放");
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
throw ex;
//sw.WriteLine("报错了!" + ex.Message);
//sw.WriteLine("报错了!" + ex.TargetSite);
}
finally
{
// sw.Flush();
//sw.Close();
}
}
#4
楼主,什么叫不好用,你的handler的ProcessRequest能进去么,调试下仨
#5
1、我的图片信息显示在axpx页面中,页面有个html标签的button,并且添加了onclick事件
2、button的onclick事件里,通过ajax调用另一个一般处理程序handler并且传递了选中的图片ID
3、在一般处理程序handler里面可以得到传递过来的图片ID
我想让页面弹出另存为,把该图片保存到本地的一个路径下
2、button的onclick事件里,通过ajax调用另一个一般处理程序handler并且传递了选中的图片ID
3、在一般处理程序handler里面可以得到传递过来的图片ID
我想让页面弹出另存为,把该图片保存到本地的一个路径下
#6
上面的方法完成可以满足你。。。 TransferFile(Agreement.Down_path + theme.Totalpackage);
方法后面的参数是绝对路径。 代码上面有- - 你只需要把你的ID传过去 然后获取。
方法后面的参数是绝对路径。 代码上面有- - 你只需要把你的ID传过去 然后获取。
#7
我试了,调试通过,但是不弹出另存为那个框
#8
弹不出框么?
#9
。。 发下代码。 我这里迅雷都可以跑出来- - 。。
#10
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
context.Response.AddHeader("pragma", "no-cache");
context.Response.AddHeader("cache-control", "");
context.Response.CacheControl = "no-cache";
context.Response.Charset = "utf-8";
//接收来源页面URL参数
NameValueCollection oParams = context.Request.Params;
//返回页面的信息
string strResult = string.Empty;
//媒体库原图文件夹路径
string strMediaLibraryPath = context.Server.MapPath("../MediaLibrary/Big/");
//媒体库缩略图文件夹路径
string strThumbnailPath = context.Server.MapPath("../MediaLibrary/Small/");
switch (oParams["type"])
{
case "detail":
strResult = GetDetailList(strMediaLibraryPath);
break;
case "download":
TransferFile(strMediaLibraryPath+"news.jpg");
break; case "thumbnail":
strResult = GetThumbnailList(strMediaLibraryPath);
break;
case "delete":
if (oParams["filename"] == null)
{
strResult = Convert.ToInt32(MediaLibInfo.FileDeleteError).ToString();
break;
}
strResult = DeleteFile(strMediaLibraryPath, oParams["filename"].ToString());
DeleteThumbnail(strThumbnailPath, oParams["filename"].ToString());
break;
default:
break;
}
context.Response.Flush();
context.Response.Write(strResult);
context.Response.End();
}
{
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
context.Response.AddHeader("pragma", "no-cache");
context.Response.AddHeader("cache-control", "");
context.Response.CacheControl = "no-cache";
context.Response.Charset = "utf-8";
//接收来源页面URL参数
NameValueCollection oParams = context.Request.Params;
//返回页面的信息
string strResult = string.Empty;
//媒体库原图文件夹路径
string strMediaLibraryPath = context.Server.MapPath("../MediaLibrary/Big/");
//媒体库缩略图文件夹路径
string strThumbnailPath = context.Server.MapPath("../MediaLibrary/Small/");
switch (oParams["type"])
{
case "detail":
strResult = GetDetailList(strMediaLibraryPath);
break;
case "download":
TransferFile(strMediaLibraryPath+"news.jpg");
break; case "thumbnail":
strResult = GetThumbnailList(strMediaLibraryPath);
break;
case "delete":
if (oParams["filename"] == null)
{
strResult = Convert.ToInt32(MediaLibInfo.FileDeleteError).ToString();
break;
}
strResult = DeleteFile(strMediaLibraryPath, oParams["filename"].ToString());
DeleteThumbnail(strThumbnailPath, oParams["filename"].ToString());
break;
default:
break;
}
context.Response.Flush();
context.Response.Write(strResult);
context.Response.End();
}