0

私はffmpegによって生成されたサムネイルをsave_FTPUploadに渡したいのですが、save_FTPUpload関数は画像ファイルをftpサーバーにアップロードすることです。どうやってやるの?これは、ftp サーバーにファイルをアップロードするための ffmpeg と「fileupload」関数を使用したサムネイル生成のコード例です。

public partial class testtttt : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        generateThumbnail();
        string fi_attachment = @"C:\2.jpg";//source image file
        save_FTPUpload(fi_attachment);
    }

    private void generateThumbnail()
    {
        string thumbpath, thumbname, videofile;

        videofile = "http://www.xxxx.com/video.Avi";
        thumbpath = @"C:\";
        thumbname = thumbpath + Path.GetFileNameWithoutExtension(videofile) + ".jpg";

        string thumbargs = "-i \"" + videofile + "\" -vframes 1 -s 60*30 -ss 00:00:00 -f image2 \"" + thumbname + "\"";

        Process process = new Process();

        process.StartInfo.FileName = Server.MapPath("~\\ffmpeg\\bin\\ffmpeg.exe");
        process.StartInfo.Arguments = thumbargs;

        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardInput = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.CreateNoWindow = false;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

        try
        {
            process.Start();
            string output2 = process.StandardError.ReadToEnd();
            string output3 = process.StandardOutput.ReadToEnd();

            if (process != null)
            {
                process.Close();
            }
        }

        catch (Exception)
        {
            this.lblMessage.Text = "Thumbnail created successfuly";//ex.Message.ToString();
        }
    }

    public bool save_FTPUpload(string fi_attachment)
    {
        bool fileSaved = false;
        //string fi_attachment = @"C:\1.jpg";
        string filename = "3.jpg";//image name to be saved in ftp
        string ftp_user = "*****"; //username
        string ftp_pass = "*****"; //password
        string ftpURI = "ftp://www.xxxx.com/thumb/"; //ftp path where the image will be saved

        while (!fileSaved)
        {
            string file_ftpURI = string.Format("{0}/{1}", ftpURI, filename);
            FtpWebRequest file_exist_request = (FtpWebRequest)FtpWebRequest.Create(file_ftpURI);
            file_exist_request.Credentials = new NetworkCredential(ftp_user, ftp_pass);
            file_exist_request.Method = WebRequestMethods.Ftp.GetFileSize;
            try
            {
                FtpWebResponse response = (FtpWebResponse)file_exist_request.GetResponse();
            }
            catch (WebException ex)
            {
                FtpWebResponse response = (FtpWebResponse)ex.Response;
                if (response.StatusCode ==
                    FtpStatusCode.ActionNotTakenFileUnavailable)
                {
                    FtpWebRequest upload_request = (FtpWebRequest)FtpWebRequest.Create(file_ftpURI);
                    upload_request.Credentials = new NetworkCredential(ftp_user, ftp_pass);

                    upload_request.Method = WebRequestMethods.Ftp.UploadFile;
                    upload_request.UsePassive = true;
                    upload_request.UseBinary = true;
                    upload_request.KeepAlive = false;

                    using (var fs = File.OpenRead(fi_attachment))
                    using (Stream upload_request_stream = upload_request.GetRequestStream())
                    {
                        fs.CopyTo(upload_request_stream);
                    }
                    FtpWebResponse upload_response = (FtpWebResponse)upload_request.GetResponse();

                    fileSaved = true;
                    this.Label1.Text = "Upload Successful";
                }
            }
        }
        return fileSaved;
    }
4

1 に答える 1

2

ffmpeg が使用する出力ファイル名を決定するので、それを使用しないのはなぜですか?

使用されるファイル名は標準出力にも表示されますが、自分で選択したため、既にわかっています。

したがって、generateThumbnail が Thumbname を返す場合、それを FTPUpload に渡すことができます。

于 2012-09-11T14:16:49.117 に答える