2017-03-03 15 views
0

私は、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をファイルに追加することができますか?どんな助けもありがとう。ありがとうございました。

+1

私は 'CustomUploadMultipartFormProvider'が' ContentDisposition'ヘッダで与えられたファイル名に書き込むと仮定しています。あなたの 'filename'変数はこの値を読み込んでいます。あなたの質問に対する正確な答えではないかもしれませんが、アップロードされたファイルの名前を変更するだけかもしれません。 – caesay

+0

この要求が発生した時点で、ファイルはすでに書き込まれています。ファイルが既に 'uploadPath'に存在するので、このコードで実際にファイル書き込みを実行している場所はありません。ファイルシステムの名前を変更するか、アップロードされているストリームを提供する別のアップロード手法を使用するだけです。 – AaronLS

+0

ありがとうございます。私は自分のコードを更新しました。しかし、それは動作していません。 –

答えて

0

GetLocalFileNameの中で何をしようとしているのか分かりませんが、これはかなりうんざりです。

最初にオフのStartsWithは、文字列が括弧に入れたものがで始まるかどうかを示すブール値(trueまたはfalse)を返します。

string str = "SIMPLE"; 
bool t = str.StartsWith("SIM"); // true 
bool f = str.StartsWith("ZIM"); // false 

あなたは、これは文字列に戻っBOOL回すと、メソッドに文字列"startsWith"を渡している事実は、それが常にない限り、文字列"false"(文字列に変換ブール値)を返しことを意味します実際のファイル名は"startsWith"で始まります。私は、これはあなたが探しているものだと思います

public override string GetLocalFileName(HttpContentHeaders headers) 
{ 
    string prefix = "Nor" + DateTime.Now.ToString("yyyyMMddHHmmss"); 
    if (headers != null && headers.ContentDisposition != null) 
    { 
     var filename = headers.ContentDisposition.FileName.Trim('"'); 
     return prefix + filename; 
    } 
    return base.GetLocalFileName(headers); 
} 

あなたのための私の提案は、おそらくC#の本や何かを読んで、もう少しのC#と.NETの基本を学ぶことです。

関連する問題