C# 冲网络服务器上下载文件时如何重命名

YuKingye 2017-11-09 09:05:57
现在我需从网络服务器上下载多个文件(这里归纳为A),打包压缩然后下载到浏览器中。
由于上传这些文件(A)时考虑到用户上传的文件名相同而冲突的问题,在上传的时候已经把这些文件(A)重命名为GUID类型的文件名,但是数据库还保存着原来的文件名。现在想要实现从网络服务器上下载这些文件(A)时重命名为原来的文件名,也就是数据库保存的文件名,然后打包压缩下载到浏览器。如果不重命名为原来的文件名,则压缩包中的文件会全部为GUID类型的文件名。请问要实现从网络服务器上下载这些文件(A)时怎么重命名为原来的文件名,能对流进行操作吗?谢谢各位大神!
下载方式是使用一下代码(url是网络服务器路径):

byte[] buf = new WebClient().DownloadData(url);

//设置下载到本地文件完整路径
string fileName = localPath + webfileName + fileType;

FileStream fs = File.Open(fileName, FileMode.OpenOrCreate);
if (null != buf)
{
fs.Write(buf, 0, buf.Length);
fs.Close();
}
return fileName;
...全文
365 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2017-12-18
  • 打赏
  • 举报
回复

        public void ExportReportGeneration(string queryJson)
        {
            //构造dynamic传入参数
            dynamic queryObj = JsonConvert.DeserializeObject(queryJson);
            queryObj.QueryType = "ReportGeneration";
            var dataList = service.GetItemList(queryObj);

            //生成和导出到Excel
            MemoryStream stream = service.SaveReportGeneration(dataList, queryObj);

            string file = string.Format("Export_{0}.xls", DateTime.Now.ToString(BaseFormat.DateTimeFormat));
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(file, Encoding.UTF8));    //通知浏览器下载文件而不是打开
            Response.BinaryWrite(stream.ToArray());
            Response.Flush();
            Response.End();
        }
关键: Response.AddHeader("Content-Disposition", "attachment; filename="
pjy612 2017-12-18
  • 打赏
  • 举报
回复
你根据要下载的数据 先临时生成个映射表呗。 比如 "1111.jpg"=>"AAA-BBB-CCC-DDD.jpg" "2222.jpg"=>"BBB-AAA-CCC-DDD.jpg" .... 下载的url 肯定是 guid1.jpg,但是你能从数据库中查到它的原始名称。 要么 你 下载的时候 下载的是 buf 流。 然后 保存文件 的文件名 写 之前 数据库记录的就行了。 类似一个重命名。 byte[] buf = new WebClient().DownloadData("AAA-BBB-CCC-DDD.jpg"); 这时候的 文件的内容 已经在 buf 里面了。 你只需要 把它保存为 你想要的名字就行了 比如 File.writeAllBytes("1111.jpg",buf); 就可以了,之后把 目录里面的文件打包就行了。 另外一个就是 你打包操作的时候 针对 压缩包进行操作。 比如 伪代码 Rar rar=new Rar(); rar.AddFile("1111.jpg",buf);<--这个时候 给这个数据集 新定一个文件名 rar.压缩(); rar.toBytes();
YuKingye 2017-11-13
  • 打赏
  • 举报
回复
不是,我现在的问题是要先从服务器上下载多个文件,然后打包压缩,但是这个多个文件是GUID类型的,我需要重命名它,这些都是要在后台做的,然后再将压缩文件下载到浏览器中
  • 打赏
  • 举报
回复
通过aspx(ashx,mvc)页面下载,而不是直接跳转文件链接 然后在里面设置当前文件名

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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