Jocelyne El Khoury Ответов: 2

ошибка преобразования файла .caf в файл .mp3 в mvc 4


Я использовал, чтобы конвертировать CAF в MP3 с помощью объекта WScript.раковины и ffmpeg.exe когда я был с помощью asp.net но теперь я с помощью веб-API спокойный способ в MVC 4, так у меня нет .aspx-страницы, я получаю следующее сообщение об ошибке:

Описание:System.Web.HttpException (0x80004005): компонент 'Wscript.Оболочка" не может быть создана. Многопоточные компоненты квартиры могут быть созданы только на страницах с директивой <%@ Page aspcompat=true %> page.
но у меня нет страницы aspx, чтобы добавить этот тег...

код, который я использовал в aspx, таков:

Dim wshShell As Object
wshShell = Server.CreateObject("Wscript.Shell")
cmd = "cmd.exe /k """"" & szCAF_PATH & """ -i """ & szPhysicalPath & """ " & Arguments & " """ & szEncodedPath & """"""
wshShell.Run(cmd)
Dim strCommand As String = "taskkill /F /IM cmd.exe"
wshShell.Run(strCommand, 0, True)
szDownloadLink = szDownloadLink.Replace(".caf", ".mp3")

а код в mvc4 таков :

wshShell = HttpContext.Current.Server.CreateObject("Wscript.Shell")
cmd = "cmd.exe /k """"" & File.CAF_PATH & """ -i """ & File.PhysicalPath & """ " & File.Arguments & " """ & File.EncodedPath & """"""
wshShell.Run(File.cmd)
strCommand = "taskkill /F /IM cmd.exe"
wshShell.Run(strCommand, 0, True)
File.DownloadLink = File.DownloadLink.Replace(".caf", ".mp3")

кто-нибудь знает, как я могу это исправить?

Sergey Alexandrovich Kryukov

Ради бога, почему Wscript.shell?
И почему "cmd.exe-?! Как же так cmd.exe это связано с бегом ffmpeg.exe-да.
Почему тасккилл?!!
Все неправильно, все. Здесь нечего обсуждать.
—СА

Jocelyne El Khoury

но как я могу сохранить файл после преобразования?

2 Ответов

Рейтинг:
19

Sergey Alexandrovich Kryukov

Пожалуйста, смотрите мои комментарии к этому вопросу. Я в шоке. Вот что вы можете сделать:

using System.Diagnostics;

//...

string path // path to ffmpeg.exe, use MapPath...
string commandLine // command line parameterts for ffmpeg; use string.Format("... {0} {1}", inputFileName, outputFileName) 
Process convertor = Process.Start(path, commandLine);
convertor.WaitForExit();
// at this point, you can use outputFileName

Пожалуйста смотрите: http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process[^].

—СА


Jocelyne El Khoury

но как я могу сохранить файл после преобразования?

Sergey Alexandrovich Kryukov

ffMpeg создает файл в соответствии с его параметрами командной строки, где вы можете поместить имя файла; пожалуйста, смотрите его документацию.
После этого вы можете использовать System.IO.FileMove(string, string) для перемещения/переименования файла в другое место, где вы решите его обслуживать. Если вы используете такую технику, вы должны завершить ее до конца вашего ответа на текущий HTTP-запрос и считать этот первый выходной файл (вывод из ffmpeg) временным файлом, поэтому вам может потребоваться дать ему уникальное имя. Вот как это делается:
http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx.

Это ответ на ваш вопрос?

—СА

Jocelyne El Khoury

я использую : strCommand = String.Формат("... {0} {1}", "'" & файл.Путь к файлу и файл.SavedFilename & ".caf" & "'", "'" & файл.Путь к файлу и файл.SavedFilename & ".mp3" & "'")

я пробовал с кавычками и без кавычек для пути ... но все равно ничего... новый преобразованный файл не сохраняется ...

я что-то упустил?

Sergey Alexandrovich Kryukov

Теперь у вас возникли проблемы со строкой.Формат. Если вы используете его, вам не нужно " &"... Конкатенация-это плохо, потому что строка неизменна...
—СА

Рейтинг:
1

Member 14519445

I highly recommend Avdshare Audio Converter.
It can convert caf to various audio format like aiff, m4a, mp3, wav, wma, aac, etc.
It also helps to convert voc, m4a, flac, ogg, aiff, ra, au, opus etc


Maciej Los

Ошибаешься! Это форум программирования. И ваш ответ никак не связан с вопросом! Так... Это не ответ!