语言吧技术网欢迎您投稿,程序员的世界我懂你!=====>点此登录投搞
当前位置: 首页 >>ASP.NET >>ASP.NET实战 >>利用FTP协议上传图片至FTP服务器——C#篇

利用FTP协议上传图片至FTP服务器——C#篇

2019/6/19 10:44:54 0人评论 63次 作者:夫人的泡泡鱼

列举一个需求,在使用U3D的工程中,利用摄像头拍摄图像并保存,而后上传至指定的FTP服务器,清空保存图像。…

列举一个需求,在使用U3D的工程中,利用摄像头拍摄图像并保存,而后上传至指定的FTP服务器,清空保存图像。


别的不多说,上代码吧!


(一)摄像头保存图像至本地


1.获取权限,初始化摄像头


IEnumerator InitCamera()

    {

        //获取授权  

        yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);

        if (Application.HasUserAuthorization(UserAuthorization.WebCam))

        {

            WebCamDevice[] devices = WebCamTexture.devices;

            if (devices.Length > 0)

            {

                deviceName = devices[0].name;

                Debug.Log("deviceName " + deviceName);

                tex = new WebCamTexture(deviceName, (int)resSize.x, (int)resSize.y, 30);

 

                if(plane!=null)

                    plane.GetComponent<Renderer>().material.mainTexture = tex;

 

                tex.Play();

 

            }

        }

    }

2.触发保存图像


    IEnumerator CaptureCoroutine()

    {

 

        string imageName ="temp";

        

        //Capture screen shot

        yield return new WaitForEndOfFrame();

        Texture2D texture = new Texture2D(tex.width, tex.height);

int y = 0;    

while (y < texture.height)  

{          

int x = 0;    

while (x < texture.width)   

{

                Color color = tex.GetPixel(x, y);    

texture.SetPixel(x, y, color);      

++x;      

}          

++y;    

}     

texture.Apply(); 

        string str = saveCapterPath + imageName + ".jpg";

        #if(UNITY_EDITOR)

        str = saveCapterPath + imageName + ".jpg";

        #endif

 

        if (File.Exists(str))

        {

            str = saveCapterPath + imageName + "(1).jpg";

            picPathForFTP += imageName + "(1).jpg,";

 

        }else

            picPathForFTP += imageName + ".jpg,";

 

        byte[] byt = texture.EncodeToJPG();

        File.WriteAllBytes(str, byt);

        yield return null;

    }

(二)FTP协议上传至服务器


    // <summary>

    /// 上传文件

    /// </summary>

    /// <param name="fileinfo">需要上传的文件</param>

    /// <param name="targetDir">目标路径</param>

    /// <param name="hostname">ftp地址</param>

    /// <param name="username">ftp用户名</param>

    /// <param name="password">ftp密码</param>

public void UploadFileForNow(FileInfo fileinfo, string targetDir, string hostname, string username, string password)

    {

        //1. check target

        string target;

        if (targetDir.Trim() == "")

        {

            return;

        }

        target = Guid.NewGuid().ToString();  //使用临时文件名

        string URI = "FTP://" + hostname  + "/" + target;

        FtpWebRequest ftp = GetRequest(URI, username, password);

 

        //设置FTP命令 设置所要执行的FTP命令,

        ftp.Method = WebRequestMethods.Ftp.UploadFile;

        //指定文件传输的数据类型

        ftp.UseBinary = true;

        ftp.UsePassive = true;

       

        //告诉ftp文件大小

        ftp.ContentLength = fileinfo.Length;

        //缓冲大小设置为2KB

        const int BufferSize = 2048;

        byte[] content = new byte[BufferSize - 1 + 1];

        int dataRead;

        //打开一个文件流 (System.IO.FileStream) 去读上传的文件

        using (FileStream fs = fileinfo.OpenRead())

        {

            try

            {

                //把上传的文件写入流

                using (Stream rs = ftp.GetRequestStream())

                {

                    do

                    {

                        //每次读文件流的2KB

                        dataRead = fs.Read(content, 0, BufferSize);

                        rs.Write(content, 0, dataRead);

                    } while (!(dataRead < BufferSize));

                    rs.Close();

                }

 

            }

            catch (Exception ex) { }

            finally

            {

                fs.Close();

            }

 

        }

 

        ftp = null;

        //设置FTP命令

        ftp = GetRequest(URI, username, password);

        ftp.Method = WebRequestMethods.Ftp.Rename; //改名

        ftp.RenameTo = fileinfo.Name;

        try

        {

            FtpWebResponse ftpWebResponse = (FtpWebResponse)ftp.GetResponse();

            Debug.Log(ftpWebResponse.StatusDescription);

 

            uploadIndex++;

            if (picPathUpload.Count > uploadIndex)

                UploadFile(picPathUpload[uploadIndex]);

 

        }

        catch (Exception ex)

        {

            ftp = GetRequest(URI, username, password);

            ftp.Method = WebRequestMethods.Ftp.DeleteFile; //删除

            ftp.GetResponse();

            throw ex;

        }

        finally

        {

            fileinfo.Delete();

        }

 

    }

    private static FtpWebRequest GetRequest(string URI, string username, string password)

    {

        //根据服务器信息FtpWebRequest创建类的对象

        FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);

        //提供身份验证信息

        result.Credentials = new NetworkCredential(username, password);

        //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true

        result.KeepAlive = false;

 

        return result;

    }

 

    public void UploadFile(string filePathNow)

    {

        UploadFileForNow(new FileInfo(filePathNow), "ss", FTPHost, FTPUserName, FTPPassword);

    }

感谢Siki学院的wongvin的学习讨论。

--------------------- 

作者:夫人的泡泡鱼 

来源:CSDN 

原文:https://blog.csdn.net/zqckzqck/article/details/90636145 

版权声明:本文为博主原创文章,转载请附上博文链接!


相关文章

CopyRight:2007-2018 语言吧 备案ICP:湘ICP备09009000号-4 http://www.yuyanba.com
分享按钮