2015-11-09 2 views
1

У меня есть проект Unity, в котором я храню данные в локальной папке. Я хочу отправить эти данные на сервер с помощью ftp-клиента. Как я могу выполнить это в Unity? Это способ сделать это? Любая библиотека или программное обеспечение, такое как filezilla, с которым я могу работать?Проект WebRequest от Unity

Я столкнулся с webRequest class, однако я не уверен, как его использовать. Я натолкнулся на предложенный код из ответа, однако я не уверен, как я его буду использовать. Я получил ошибку от функции FTPupload, расположенной внутри функции onGUI().

ответ

4

Вы на правильном пути. Я думаю, это использование, которое вы ищете: https://github.com/mminer/ftpuploader-unity/blob/master/Editor/Uploader.cs

Прокрутить вниз до Upload метод; Я использовал то же самое много раз, и он работает очень хорошо.

[EDIT] Вот пример кода aboves, чем может быть использован непосредственно в проекте Unity:

using UnityEngine; 
using System.Collections; 
using System.IO; 
using System; 
using System.Net; 

////////////////////////////////////////////////////////////////////////// 
//CLASS 
////////////////////////////////////////////////////////////////////////// 
public class FTPUpload : MonoBehaviour 
{  
    #region Methods 
    ////////////////////////////////////////////////////////////////////////// 
    //METHODS 
    ////////////////////////////////////////////////////////////////////////// 
    public void CallThisWithButton() 
    { 
     Upload("PATH_TO_YOUR_FILE", "YOUR_FTP_SERVER_ADRESS", "YOUR_USERNAME", "YOUR_PASSWORD", "ANY_SUB_FOLDER"); 
    } 

    /// <summary> 
    /// Uploads a file through FTP. 
    /// </summary> 
    /// <param name="filename">The path to the file to upload.</param> 
    /// <param name="server">The server to use.</param> 
    /// <param name="username">The username to use.</param> 
    /// <param name="password">The password to use.</param> 
    /// <param name="initialPath">The path on the server to upload to.</param> 
    static void Upload(string filename, string server, string username, string password, string initialPath) 
    { 
     Debug.Log("Upload started."); 

     var file = new FileInfo(filename); 
     var address = new Uri("ftp://" + server + "/" + Path.Combine(initialPath, file.Name)); 
     var request = FtpWebRequest.Create(address) as FtpWebRequest; 

     // Upload options: 

     // Provide credentials 
     request.Credentials = new NetworkCredential(username, password); 

     // Set control connection to closed after command execution 
     request.KeepAlive = false; 

     // Specify command to be executed 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     // Specify data transfer type 
     request.UseBinary = true; 

     // Notify server about size of uploaded file 
     request.ContentLength = file.Length; 

     // Set buffer size to 2KB. 
     var bufferLength = 2048; 
     var buffer = new byte[bufferLength]; 
     var contentLength = 0; 

     // Open file stream to read file 
     var fs = file.OpenRead(); 

     try 
     { 
      // Stream to which file to be uploaded is written. 
      var stream = request.GetRequestStream(); 

      // Read from file stream 2KB at a time. 
      contentLength = fs.Read(buffer, 0, bufferLength); 

      // Loop until stream content ends. 
      while (contentLength != 0) 
      { 
       //Debug.Log("Progress: " + ((fs.Position/fs.Length) * 100f)); 
       // Write content from file stream to FTP upload stream. 
       stream.Write(buffer, 0, contentLength); 
       contentLength = fs.Read(buffer, 0, bufferLength); 
      } 

      // Close file and request streams 
      stream.Close(); 
      fs.Close(); 
     } 
     catch (Exception e) 
     { 
      Debug.LogError("Error uploading file: " + e.Message); 
      return; 
     } 

     Debug.Log("Upload successful."); 
    } 
    ////////////////////////////////////////////////////////////////////////// 
    #endregion 
} 
////////////////////////////////////////////////////////////////////////// 
+0

Я уже сталкивался с предлагаемым классом. Однако я не уверен, как я буду использовать его из своего кода. Я хочу, чтобы внутри кнопки, когда кнопка нажата для отправки данных на мой сервер с помощью ftpuploader. Я копирую файл в свой проект, и у меня возникла ошибка с FTPUpload (метод или класс?) Я не получил ошибку. –

+0

Не следует загружать вместо FTPUpload? –

+0

@JoseRamon Я отредактировал свой первый ответ, чтобы вы могли найти пример кода, который вы можете копировать/вставлять в свой проект. Имейте в виду, что я использую UI 4.6 Button для вызова метода 'CallThisWIthButton()'. Кроме того, убедитесь, что ваш путь к вашему файлу верен: \\ вместо \ (мой выглядел как 'C: \\ Users \\ Roy \\ Desktop \\ test_file.txt' и что путь, на который вы нацеливаетесь FTP-сервер уже существует;) – Kardux

Смежные вопросы