开发者社区> 技术小牛人> 正文

Unity3D下用C#通过WinSCP命令行方式给Linux服务器SCP传文件

简介:
+关注继续查看

遇到一个需求是在Unity3D做编辑器工具时需要把生成的AssetBundle包上传到资源服务器,资源服务器用的Linux。

实现分为三部分:1,C#上传工具类;2,WinSCP脚本;3,传参调用使用上传功能。


1,C#上传工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using UnityEngine;
using System.Collections;
using System.IO;
using System;
using System.Diagnostics;
 
public class UploadHelper
{
 
    public static void callUploadProcess(string arguments)
    {
 
        string winScpPath = Directory.GetParent(Application.dataPath) + "/WinSCP/WinSCP.exe";
 
        try
        {
            Process proc = null;
 
            bool redirectOutput = false;
 
            proc = new Process();
            proc.StartInfo.FileName = winScpPath;
            proc.StartInfo.Arguments = arguments;
 
            if (redirectOutput)
            {
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.CreateNoWindow = true;
            }
            else
            {
                proc.StartInfo.CreateNoWindow = false;
            }
            proc.Start();
 
            if (redirectOutput)
            {
                //重定向,显示上传工具输出
                StreamReader sr = proc.StandardOutput;
                while (!sr.EndOfStream)
                {
                    string s = sr.ReadLine();
                    UnityEngine.Debug.Log(s);
                }
            }
 
            proc.WaitForExit();
 
            if (proc.ExitCode == 0)
            {
                UnityEngine.Debug.LogFormat("[{0}] 上传完毕!", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            else
            {
                UnityEngine.Debug.LogFormat("[{0}] 上传失败! ExitCode:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), proc.ExitCode);
            }
 
        }
        catch (Exception ex)
        {
            UnityEngine.Debug.LogError(String.Format("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()));
        }
    }
}

2,WinSCP脚本,

1
UploadAssetBundles.script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
option echo off
option batch on
option confirm off
 
open scp://"%1%":"%2%"@"%3%"
 
option transfer binary
synchronize remote -mirror -delete %4% %5%
 
chmod 755 %5%/*
 
close
 
exit

3,C#程序内传参调用实现上传功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private static void UploadToServer(BuildTarget target)
    {
        string remoteFolder = null;//远程服务器资源所在路径
        switch (target)
        {
            case BuildTarget.StandaloneWindows64:
                remoteFolder = "###/AssetBundle/PC";
                break;
            case BuildTarget.Android:
                remoteFolder = "###/AssetBundle/Android";
                break;
            case BuildTarget.iOS:
                remoteFolder = "###/AssetBundle/iOS";
                break;
            default:
                return;
        }
 
        string uploaderPath = Application.dataPath + "/Uploader";
 
        //脚本路径
        string scriptPath = uploaderPath + "/UploadAssetBundles.script";
 
        //Log路径
        string logPath = Directory.GetParent(Application.dataPath) + "/upload.log";
 
        string localFolder = Application.dataPath + "/ABs";//本地资源目录路径
 
        string[] param ={
                "test",//远程服务器登录用户名
                "test1234",//远程服务器登录密码                
                "192.168.1.xxx",//远程服务器IP或域名                
                localFolder,
                remoteFolder,
                scriptPath,
                logPath,
            };
 
        string arguments = String.Format("/console /log={6} /script={5} /parameter \"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\"", param);
 
        UploadHelper.callUploadProcess(arguments);
 
    }

arguments最后的

1
/parameter \"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\""

是传给WinSCP脚本的参数,对应脚本里的“%1%”到“%5%”.



关于WinSCP命令行调用说明可以查看官网https://winscp.net/eng/docs/scripting

WinSCP可以在这下载:http://down.51cto.com/data/2304295

本文转自   zl1030   51CTO博客,原文链接:http://blog.51cto.com/zl1030/1920820

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
新功能:日志服务命令行工具ETL发布!
日志服务命令行工具ETL发布,解决数据采集、分析查询、投递归档、外部整合过程中的数据规整痛点,提供实时、可靠、可扩展、可管理的运行模式支持,以及全面简单的ETL规则,并支持丰富的扩展支持。
3195 0
Linux 服务器建站新手教程不需要敲一行命令【小白篇】
Linux 服务器配置、运行、不用敲命令 WordPress 建站攻略——助力新手快速利用Linux系统建立属于自己的站点——给新手节省宝贵的时间,避免采坑!
456 0
命令行下开启与关闭windows防火墙关端口(转)
sc config sharedaccess start= auto //设置防火墙服务为自动 net start sharedaccess //开启防火墙服务   关闭端口 netsh firewall add portopening protocol = TCP port = 139 n...
934 0
17.Linux shell编程(通过Makefile看Android.mk文件)
(创建于2018/2/11 上午8:12:32) Makefile文件 //递归展开式,可以引用还没有定义的变量,展开是引用时展开 1 str1=$(str2) ...
1226 0
Linux:删除文件后不释放磁盘空间解决方法
Linux:删除文件后不释放磁盘空间解决方法
52 0
linux内存查看方式
 如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.$ free -m total used free shared buffers cachedMem: 1002 ...
540 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载