Как скачать файл из FileCabinet в NetSuite с помощью C # - PullRequest
2 голосов
/ 17 июня 2019

Мне нужно скачать текстовый файл из FileCabinet в NetSuite. Я могу искать все файлы в папке и получить обратно размер файла, имя и URL. Но когда я проверяю свойство content, оно равно NULL. Как я могу скачать файл локально?

Я пытался использовать URL для загрузки файла с помощью WebClient, но он возвращает 403. Что имеет смысл.

        var result = Client.Service.search(fileSearch);            
        var recordList = (Record[])result.recordList;
        if (recordList != null && recordList.Length != 0)
        {
            foreach (var item in recordList)
            {                    
                var file = (com.netsuite.webservices.File)item;                    

                int fileSize = (int)file.fileSize; // Returns the correct file size

                byte[] fileContent = file.content; // NULL reference ??

                Console.WriteLine(file.url + " ==== " + file.name );

                // How to download the File from the url above??

                // Can't do this, 403 error, below client dont use the same security context
                //using (var client = new WebClient())
                //{                        
                //    client.UseDefaultCredentials = false;
                //    client.DownloadFile(baseUrl + file.url, file.name);
                //}
            }
        }

Я ожидал, что 'content' будет содержать содержимое файла.

1 Ответ

1 голос
/ 18 июня 2019

Когда вы выполняете поиск, результаты поиска не включают в себя содержимое файла, но у вас действительно есть идентификатор файла. Ниже приведен метод расширения службы NetSuite для получения файла по его идентификатору:

public static NetSuite.File GetFileById(this NetSuiteService ns, int fileId)
{
    var file = new NetSuite.File();
    var response = ns.get(new RecordRef()
    {
        type = RecordType.file,
        internalId = fileId.ToString(),
        typeSpecified = true
    });

    if (response.status.isSuccess)
    {
        file = response.record as File;
    }

    return file;
}

var f = ns.GetFileById(3946);
var path = Path.Combine(Directory.GetCurrentDirectory(), f.name);
var contents = f.content;
System.IO.File.WriteAllBytes(path, contents);

Console.WriteLine($"Downloaded {f.name}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...