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

本文介绍如何在Unity3D中开发编辑器工具,利用C#脚本配合WinSCP实现AssetBundle资源包自动上传至Linux服务器的过程。文章涵盖C#上传工具类编写、WinSCP脚本配置及参数传递等内容。

遇到一个需求是在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值