下载zip文件报错

-一个大坑 2018-08-10 10:07:27
我把文件夹压缩然后返回提示:FileNotFoundException: Could not find file: F:\DLR\DLR.Web\pdf.zip
F:\DLR\DLR.Web\pdf.zip这个路径没问题呀,见图片


public IActionResult ZipFolder()
{
try
{
if (!Directory.Exists(".//PaPDF"))//若文件夹不存在则新建文件夹
{
Directory.CreateDirectory(".//PaPDF"); //新建文件夹
}
//获取应用程序的当前工作目录
string path = System.IO.Directory.GetCurrentDirectory() + @"\pdf.zip";
string zipPath = ".//pdf.zip"; //压缩后输出文件路径
string folderPath = ".//PaPDF//"; //压缩前的文件夹路径
(new FastZip()).CreateZip(zipPath, folderPath, true, ""); //调用SharpZipLib.dll压缩文件夹
Directory.Delete(folderPath, true); //压缩后删除文件夹
return File(path, "application/zip", "pdf.zip");
}
catch (Exception ex)
{
return Json(new { status = "Danger", msg = "下載失敗!原因:" + ex.Message });
}
}
...全文
330 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
-一个大坑 2018-08-13
  • 打赏
  • 举报
回复
引用 7 楼 qq_35955916 的回复:
Could not find file: F:\DLR\DLR.Web\pdf.zip
找不到文件
根据你截图的文件夹
这个路径只是文件夹路径,不是具体的一个文件路径
你这个路径,程序是去找DLR.Web文件夹下面的名字叫pdf的zip文件

然而你正确的文件路径应该是 F:\DLR\DLR.Web\pdf.zip\xxxx(打包后的zip文件).zip

另外文件夹名字不建议带有特殊符号和中文

看楼下,应该是asp code的原因,mvc用路径可以返回,code不行,改成文件流就好了
-一个大坑 2018-08-13
  • 打赏
  • 举报
回复
好了,不能以文件返回,只能以文件流方式返回

public IActionResult ZipFolder()
{
try
{
if (!Directory.Exists(".//PaPDF"))//若文件夹不存在则新建文件夹
{
Directory.CreateDirectory(".//PaPDF"); //新建文件夹
}
//获取应用程序的当前工作目录
//string path = System.IO.Directory.GetCurrentDirectory() + @"\pdf.zip";
string zipPath = ".//pdf.zip"; //压缩后输出文件路径
string folderPath = ".//PaPDF//"; //压缩前的文件夹路径

(new FastZip()).CreateZip(zipPath, folderPath, true, ""); //调用SharpZipLib.dll压缩文件夹
Directory.Delete(folderPath, true); //压缩后删除文件夹
var stream = System.IO.File.OpenRead(zipPath);//转换为文件流的方式输出
return File(stream, "application/zip");
}
catch (Exception ex)
{
return Json(new { status = "Danger", msg = "下載失敗!原因:" + ex.Message });
}
}
程序员的键盘 2018-08-13
  • 打赏
  • 举报
回复
Could not find file: F:\DLR\DLR.Web\pdf.zip
找不到文件
根据你截图的文件夹
这个路径只是文件夹路径,不是具体的一个文件路径
你这个路径,程序是去找DLR.Web文件夹下面的名字叫pdf的zip文件

然而你正确的文件路径应该是 F:\DLR\DLR.Web\pdf.zip\xxxx(打包后的zip文件).zip

另外文件夹名字不建议带有特殊符号和中文
-一个大坑 2018-08-10
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
另外
Directory.Delete(folderPath, true); //压缩后删除文件夹
return File(path, "application/zip", "pdf.zip");

检查这两个
删除文件夹????
file这个方法 ,到底如何处理文件的的??

话说因为我没仔细看,只大体扫了一下代码,感觉上问题基本就在我上面说的4点上
1.权限
2.mappath
3.东西都没发送干嘛删除文件夹
4.file那个方法到底干了啥?

删除文件是:每次下载都新建文件夹,然后打包成zip,返回。如果不删除,里面就还有旧文件,不是这次下载的文件。
1.权限这个当时没注意,我到时问下老板。现在测试是本地,权限是有的
2.Server.MapPath不支持我就用GetCurrentDirectory了
3.打包成zip,返回zip就行了,文件夹已经没用就删了
4.操作文件类,我选的比较少的参数的方法,路径+类型+返回的文件名
wanghui0380 2018-08-10
  • 打赏
  • 举报
回复
另外
Directory.Delete(folderPath, true); //压缩后删除文件夹
return File(path, "application/zip", "pdf.zip");

检查这两个
删除文件夹????
file这个方法 ,到底如何处理文件的的??

话说因为我没仔细看,只大体扫了一下代码,感觉上问题基本就在我上面说的4点上
1.权限
2.mappath
3.东西都没发送干嘛删除文件夹
4.file那个方法到底干了啥?
wanghui0380 2018-08-10
  • 打赏
  • 举报
回复
对于web,对于asp.net,我们说你得使用server.mappath,而非GetCurrentDirectory

同时对于你得到的物理路径你的有权限进行操作,不然那将是一个黑客工具,想象一下如果web系统可以在不授权的情况,把你的数据库文件整个打包发送出去是什么概念
-一个大坑 2018-08-10
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你得确认你得zip到底被压缩到了哪个路径,你这种返回方式也挺奇怪的,正常是得到要保存的zip路径,然后将这个路径传给zip方法进行压缩,最后用这个zip路径来得到压缩文件,而你的path跟zip方法居然完全没关系?

最开始用的zipPath当返回路径,提示找不到此文件,我以为是相对路径的原因
就换成string path = System.IO.Directory.GetCurrentDirectory() + @"\pdf.zip";取绝对路径来返回
结果还是提示找不到此文件
  • 打赏
  • 举报
回复
你得确认你得zip到底被压缩到了哪个路径,你这种返回方式也挺奇怪的,正常是得到要保存的zip路径,然后将这个路径传给zip方法进行压缩,最后用这个zip路径来得到压缩文件,而你的path跟zip方法居然完全没关系?
-一个大坑 2018-08-10
  • 打赏
  • 举报
回复
前端

$(document).on('click','#btnDown',function(){
window.location = '/DLRRP01/ZipFolder';
})

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧