Загружается пустой файл на яндекс диск

  • Автор темы Автор темы C2H5OH
  • Дата начала Дата начала

C2H5OH

Client
Регистрация
30.09.2014
Сообщения
55
Реакции
26
Баллы
18
Здравствуйте Надеюсь кто-нибудь поможет. Не могу понять как решить проблему. Работаю с яндекc диском через api. Когда делаю загрузку файла на яндек диск - все загружается, только в результате файл получается постой.

Прикрепил сюда файл для теста. Только там убрал свой апи из свойства действия "Authorization: ВСТАВИТЬ_СВОЙ_КОД"

Думаю что проблема экшене "файлы для загрузки"

Еще видел тему https://zennolab.com/discussion/threads/api-jandeks-disk.55946/ там есть сsharp код - но он не рабочий. В сишарпе не знаю, но пробовал ковыряться и не получилось.

Кто может подскажите как решить проблему - экшеном или сишапром - без разницы. Либо подскажите в каком направлении копать.
 

Вложения

  • test.zp
    test.zp
    13,4 KB · Просмотры: 166
Сейчас еще покопался. Вот этот экшн файл для загрузки - вообще в данном случае не функционирует, потому что если его убрать то результат тот же остается. Получается вопрос в том как передать файл в put экшн.
 
где ВСТАВИТЬ_СВОЙ_КОД этот код взять ?
прилку сгенерировал но что то там ни один из 2 кодов не подходит
http://joxi.ru/V2VzVb9HB3ooR2 еще может что то добавить нужно?
 
  • Спасибо
Реакции: Андрейка2020
Для тех, кто придет сюда из Google за решением: у меня проблема была в том, что в put я не передавал сам файл (в документации к yandex disk об этом явно не говорится). в случает python нужно так:

Python:
Развернуть Свернуть Копировать
files = {"file": open(f"{file_path}/{file_name}", "rb")}
put_response = requests.put(disk_put_url, files=files)
 
где ВСТАВИТЬ_СВОЙ_КОД этот код взять ?
прилку сгенерировал но что то там ни один из 2 кодов не подходит
http://joxi.ru/V2VzVb9HB3ooR2 еще может что то добавить нужно?
Присоединяюсь к вопросу... По доке нужно свои url указывать и выводить там скрипты, но для зенки это так себе вариант. Че теперь, чтоб по апи работать, сайт захостить чтоли?
 
Если что, то получилось решить задачу по загрузке файла на я.диск по апи только через curl:


C#:
Развернуть Свернуть Копировать
// Параметры
string filePath = project.Directory + @"\file\" + project.Variables["temp"].Value;
string uploadUrl = project.Json.href.ToString(); // полученный get-запросом url для загрузки файла

// Формируем команду curl с выводом заголовков
string curlCmd = $"curl -i -T \"{filePath}\" \"{uploadUrl}\"";

// Запуск процесса
var proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/C " + curlCmd;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();

// Формируем полный ответ
string fullResponse = "=== STDOUT ===\n" + output + "\n\n=== STDERR ===\n" + error;

// Логирование результата
project.SendInfoToLog("Ответ curl:", true);
project.SendInfoToLog(fullResponse, true);

// Сохраняем полный ответ в переменную
project.Variables["api_response"].Value = fullResponse;

// Проверка результата
if (proc.ExitCode == 0)
{
    project.SendInfoToLog("✓ Файл отчета загружен через curl!", true);
    
    // Извлекаем код ответа из заголовков
    if (output.Contains("HTTP/1.1 201 Created"))
    {
        project.SendInfoToLog("Код ответа: 201 Created", true);
        
        // Извлекаем Location из заголовков
        string[] lines = output.Split('\n');
        foreach (string line in lines)
        {
            if (line.StartsWith("Location:"))
            {
                string location = line.Substring(9).Trim();
                project.SendInfoToLog("Файл сохранен по пути: " + Uri.UnescapeDataString(location), true);
                break;
            }
        }
    }
}
else
{
    project.SendInfoToLog("ОШИБКА загрузки через curl! Код: " + proc.ExitCode, true);
}
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)