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

C2H5OH

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

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

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

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

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

Вложения

  • 13,4 КБ Просмотры: 102

C2H5OH

Client
Регистрация
30.09.2014
Сообщения
55
Благодарностей
26
Баллы
18
Сейчас еще покопался. Вот этот экшн файл для загрузки - вообще в данном случае не функционирует, потому что если его убрать то результат тот же остается. Получается вопрос в том как передать файл в put экшн.
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 410
Благодарностей
402
Баллы
83
где ВСТАВИТЬ_СВОЙ_КОД этот код взять ?
прилку сгенерировал но что то там ни один из 2 кодов не подходит
http://joxi.ru/V2VzVb9HB3ooR2 еще может что то добавить нужно?
 
  • Спасибо
Реакции: Андрейка2020

kkecher

Новичок
Регистрация
11.01.2024
Сообщения
1
Благодарностей
0
Баллы
1
Для тех, кто придет сюда из Google за решением: у меня проблема была в том, что в put я не передавал сам файл (в документации к yandex disk об этом явно не говорится). в случает python нужно так:

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