これは、.cafファイルをサーバーにアップロードし、.mp3に変換して、.cafファイルを削除する私のAPIメソッドです。ただし、問題は、元のファイルだけでなく、元のファイルと変換されたファイルの両方が削除されることです。
[HttpPost]
[ActionName("UploadCompetitionEntry")]
public async Task<HttpResponseMessage> UploadCompetitionEntry([FromUri]string folderName)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
}
string path = System.Web.Hosting.HostingEnvironment.MapPath("~/" + folderName);
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(path);
var task = Request.Content.ReadAsMultipartAsync(provider);
// Log exceptions
await task.ContinueWith(t =>
{
if (t.IsFaulted)
{
// Log t.Exception
}
});
var bodyPart2 = provider.FileData.Where(p => p.Headers.ContentDisposition.Name.Replace("\"", string.Empty) == folderName).FirstOrDefault();
if (bodyPart2 != null)
{
string savedFile2 = bodyPart2.LocalFileName;
string originalFile2 = bodyPart2.Headers.ContentDisposition.FileName.Replace("\"", string.Empty);
string uniqueFilename = string.Format(@"{0}", Guid.NewGuid());
string newFile2 = uniqueFilename + Path.GetExtension(originalFile2);
// Copy file and rename with new file name and correct extension
FileInfo file2 = new FileInfo(savedFile2);
file2.CopyTo(Path.Combine(path, newFile2), true);
file2.Delete();
if (folderName == "music")
{
//converting .caf to .mp3 and creating a new .mp3 file
MediaFuncs.ConvertToMp3(Path.Combine(path, newFile2), uniqueFilename);
//deleting the .caf file
FileInfo file3 = new FileInfo(Path.Combine(path, newFile2));
file3.Delete();
}
}
return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<Object> { success = true, message = "Media Uploaded" });
}
そしてこれが私のコンバーター方式です
public static void ConvertToMp3(string filename, string uniqueFilename)
{
string musicPath = System.Web.Hosting.HostingEnvironment.MapPath("~/" + "music");
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = System.Web.Hosting.HostingEnvironment.MapPath("~/" + "ffmpeg.exe");
info.Arguments = " -i " + filename + " " + Path.Combine(musicPath, uniqueFilename + ".mp3");
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(info);
}
私は何か間違ったことをしていますか?元のファイルだけを削除する他の方法を誰かが知っている場合は、私に知らせてください、私は一日中それについて頭を悩ませています:(
編集:ブレークポイントを設定してチェックしました。変換が完了する前に.cafファイルを削除していると思います。コンバーターメソッドを呼び出した直後でファイルを削除する前にブレークポイントを設定したときに、.mp3が削除されなかったためです。
では、変換が完了するまで削除を停止するにはどうすればよいですか?