私は、web APIとangularjsで1つのアプリケーションを開発しています。私はファイルのアップロード部分を持っています。私はファイルをアップロードすることができて、私はwebroot(私はアップロードと呼ばれるフォルダを作成)にファイルを格納していません。私の問題は、ファイルの一意性を維持するための良い命名規則を使用していないため、ファイルを上書きする可能性があるからです。私はangularjsに新しいので、私はリンクの下で言及した。 http://instinctcoder.com/angularjs-upload-multiple-files-to-asp-net-web-api/
これは私のコントローラレベルのコードです。上記のコードでアップロード時にC#でファイルの名前を変更するには?
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var uploadPath = HttpContext.Current.Server.MapPath("~/Uploads");
var multipartFormDataStreamProvider = new CustomUploadMultipartFormProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider);
var fileName = "";
DateTime dt = DateTime.Now;
foreach (var key in multipartFormDataStreamProvider.Contents)
{
var a = key.Headers;
fileName = a.ContentDisposition.FileName;
break;
}
foreach (var key in multipartFormDataStreamProvider.FormData.AllKeys)
{
foreach (var val in multipartFormDataStreamProvider.FormData.GetValues(key))
{
Console.WriteLine(string.Format("{0}: {1}", key, val));
}
}
私は私が試みたが、何だけ来て、元のファイル名
string filenameNew = "App1" + DateTime.Now.ToString("yyyyMMddHHmmss");
fileName = filenameNew + a.ContentDisposition.FileName;
public CustomUploadMultipartFormProvider(string path) : base(path) { }
public override string GetLocalFileName(HttpContentHeaders headers)
{
string startwith = "Nor" + DateTime.Now.ToString("yyyyMMddHHmmss");
if (headers != null && headers.ContentDisposition != null)
{
return headers
.ContentDisposition
.FileName.TrimEnd('"').TrimStart('"').StartsWith("startwith").ToString();
}
return base.GetLocalFileName(headers);
}
これ以下のようにファイル名の先頭に日付部分を追加しようとしています。保存中にdatepartをファイルに追加することができますか?どんな助けもありがとう。ありがとうございました。
私は 'CustomUploadMultipartFormProvider'が' ContentDisposition'ヘッダで与えられたファイル名に書き込むと仮定しています。あなたの 'filename'変数はこの値を読み込んでいます。あなたの質問に対する正確な答えではないかもしれませんが、アップロードされたファイルの名前を変更するだけかもしれません。 – caesay
この要求が発生した時点で、ファイルはすでに書き込まれています。ファイルが既に 'uploadPath'に存在するので、このコードで実際にファイル書き込みを実行している場所はありません。ファイルシステムの名前を変更するか、アップロードされているストリームを提供する別のアップロード手法を使用するだけです。 – AaronLS
ありがとうございます。私は自分のコードを更新しました。しかし、それは動作していません。 –