次のような形式の URL からアクセスできるサーバー上のファイルがあります: http:// address/Attachments.aspx?id=GUID
GUID にアクセスでき、複数のファイルを同じフォルダーにダウンロードできる必要があります。
その URL を取得してブラウザに表示すると、ファイルがダウンロードされ、元のファイル名が付けられます。
その動作を C# で再現したいと考えています。WebClient クラスの DownloadFile メソッドを使用してみましたが、新しいファイル名を指定する必要があります。さらに悪いことに、DownloadFile は既存のファイルを上書きします。すべてのファイルに一意の名前を生成できることはわかっていますが、元の名前が本当に好きです。
元のファイル名を保持したままファイルをダウンロードすることはできますか?
アップデート:
以下の素晴らしい答えを使用して 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));
}
実際のファイル名を取得するには、文字列を少し操作する必要がありました。私はとても興奮しています。みんな、ありがとう!