我有一个服务器上的文件,可以从这样格式的URL访问:http:// address / Attachments.aspx?id = GUID
我可以访问GUID,并且需要能够将多个文件下载到同一文件夹 .
如果你把这个URL扔到浏览器中,你将下载该文件,它将具有原始文件名 .
我想在C#中复制该行为 . 我尝试过使用WebClient类的DownloadFile方法,但是必须指定一个新的文件名 . 更糟糕的是,DownloadFile将覆盖现有文件 . 我知道我可以为每个文件生成一个唯一的名称,但我真的很喜欢原始文件 .
是否可以下载保留原始文件名的文件?
Update:
使用下面的精彩答案来使用WebReqest类,我提出了以下完美的工作:
public override void OnAttachmentSaved(string filePath)
{
var webClient = new WebClient();
//get file name
var request = WebRequest.Create(filePath);
var response = request.GetResponse();
var contentDisposition = response.Headers["Content-Disposition"];
const string contentFileNamePortion = "filename=";
var fileNameStartIndex = contentDisposition.IndexOf(contentFileNamePortion, StringComparison.InvariantCulture) + contentFileNamePortion.Length;
var originalFileNameLength = contentDisposition.Length - fileNameStartIndex;
var originalFileName = contentDisposition.Substring(fileNameStartIndex, originalFileNameLength);
//download file
webClient.UseDefaultCredentials = true;
webClient.DownloadFile(filePath, String.Format(@"C:\inetpub\Attachments Test\{0}", originalFileName));
}
只需要进行一些字符串操作即可获得实际的文件名 . 我太激动了 . 感谢大家!
1 回答
正如评论中暗示的那样,文件名将在
Content-Disposition
Headers 中提供 . 不确定如何在使用WebClient
时获取其值,但使用WebRequest
时相当简单: