Ошибка файла DailyMotion Upload API

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

Id = 31, Status = RanToCompletion, Method = "{null}", 
Result = "{\"error\":\"missing file\",\"seal\":\"4a24a4c8a51771d9d3b8bcd4462e721b\"}"

Я использую С# в .net 4.5 и сгенерировал следующие вызовы:

POST [[UPLOAD URL]] HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary="c83ccd81-39f7-4167-a8f1-74ab63eb4219"
Host: upload-01.sv6.dailymotion.com
Content-Length: 9893501
Expect: 100-continue

--c83ccd81-39f7-4167-a8f1-74ab63eb4219
Content-Disposition: form-data; name="file"; filename="TESTFILE.mp4"
Content-Type: application/octet-stream

[[[FILE BINARY]]]

Я успешно загрузил, используя образец CURL DailyMotion. Используя Fiddler, CURL генерирует следующее:

POST [[UPLOAD URL]] HTTP/1.1
User-Agent: curl/7.33.0
Host: upload-02.sv6.dailymotion.com
Accept: */*
Connection: Keep-Alive
Content-Length: 9893509
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------a49610ec11411f2a

--------------------------a49610ec11411f2a
Content-Disposition: form-data; name="file"; filename="TESTFILE.mp4"
Content-Type: application/octet-stream

[[FILE BINARY]]

Бинарный файл выглядит хорошо, и единственные отличия, которые я вижу, это заголовки подключения и User-Agent. Изучая заголовок Connection, похоже, что Keep-Alive не нужен с HTTP/1.1. Я пробовал несколько разных пользовательских агентов (Mozilla, CURL, IE), но никаких изменений в ответе.

Я ценю любое понимание того, что происходит. Благодарю вас!

РЕДАКТИРОВАТЬ Добавленный код:

mediatype = "video/mp4"
name = "file"
filename = "file"
data = {byte[9893291]}

 public async Task UploadRequest(string mediatype, string name, string filename, byte[] data)
    {
        using(HttpClient httpClient = new HttpClient())
        {
            var requestContent = new MultipartFormDataContent();

            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));

            var videoContent = new ByteArrayContent(data);
            videoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
            videoContent.Headers.ContentDisposition.Name = "\"file\"";
            videoContent.Headers.ContentDisposition.FileName = filename;
            videoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");

            requestContent.Add(videoContent, name);

            Apirequest.HttpRequestMessage.Content = requestContent;

            Apirequest.HttpResponseMessage = httpClient.SendAsync(Apirequest.HttpRequestMessage).Result;
            Apirequest.HttpResponseMessage.EnsureSuccessStatusCode();

        }
    }

РЕДАКТИРОВАТЬ Обновлена ​​​​следующая помощь

POST http://upload-02.nyc.dailymotion.com/upload?uuid=c8542d0a9be73c55fbace1ee4aa1744b&seal=4770461f7f07b4e0c15750d70bc44377 HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary=62fcae82-e1b2-4df3-99c4-90fad29be62d
Host: upload-02.nyc.dailymotion.com
Content-Length: 9893493
Expect: 100-continue

--62fcae82-e1b2-4df3-99c4-90fad29be62d
Content-Disposition: form-data; name="Testfile.mp4"; filename=Testfile.mp4
Content-Type: application/octet-stream

���ftypmp42���mp41mp42isom���wide���mdat!�@h!
�Ќ>��SZa��x�M�޹SZa��{�!
�ˊ��]C���I��x�8V]�F}=�_Pc1�w�d>��.�!
������hRDq��0�`D�4�QG��A��nn��û�6��ݳ���ι�τpE����s���8)�=����^�ʇ�/�N8k.��]Jr)�z���pTR�
=}.�!
[[FILE GOES ON]]
ðb ’h  'v† )ˆI 7| F3• Ršv _Ê0 kC yDÀ ‚¡] ‰¢ h ŽÂi /
×ÿ  ¥ Ó
‘`Q ‘É ’Ö ’K ’Õ ’ÿ\ “ˆŠ “³Â ”"G ”7»   +udta   #titl    ÇTestFile 
--62fcae82-e1b2-4df3-99c4-90fad29be62d--

РЕДАКТИРОВАТЬ: был запрошен пример кода исправления. Это выглядит следующим образом:

videoContent.Headers.ContentDisposition.FileName = "\"" + name + "\"";

person ScoobySnax    schedule 19.05.2014    source источник
comment
Можете ли вы предоставить фактический код? это может помочь понять, что происходит не так.   -  person Tilly    schedule 21.05.2014


Ответы (1)


После расследования оказалось, что модуль nginx-upload-module, отвечающий за обработку загрузки файлов на нашей стороне, не понимает границы содержимого в кавычках в заголовках HTTP, что, согласно RFC1341 в любом случае не является стандартным способом определения границ в HTTP. Похоже, что библиотека C#, которую вы используете для создания своего запроса, может соответствовать стандарту для типа контента multipart/digest вместо multipart/form-data (см. раздел 7.2.4). Пожалуйста, проверьте, есть ли у вас какой-либо контроль или нет, и повторите попытку.

person dailymotion    schedule 23.05.2014
comment
Я смог сделать обходной путь, чтобы удалить кавычки с границы. Я все еще получаю ту же ошибку. У меня может быть несколько ошибок, но я не могу видеть детали. Благодарю вас! - person ScoobySnax; 25.05.2014
comment
Можете ли вы присоединиться к полному HTTP-запросу, который вы пытаетесь выполнить, не запутывая URL-адрес загрузки и включая несколько байтов из самого файла + границы? Ваша проблема здесь ни о чем, я подозреваю, что действительно может быть другая ошибка с чем-то другим, кроме самого процесса загрузки. Вы абсолютно уверены, что правильно аутентифицируете пользователя? - person dailymotion; 26.05.2014
comment
Обновил код и опубликовал результат. Я проверил, что я аутентифицирован, могу получить билет загрузки/URL загрузки. Я также подтвердил, что могу выполнять другие действия, прошедшие проверку подлинности. - person ScoobySnax; 27.05.2014
comment
Это прозвучит глупо, но сейчас вы пропустили некоторые кавычки :) В начале у вас были кавычки вокруг имени файла в заголовке Content-Disposition (см. раздел 19.5.1 RFC2616), теперь у вас их нет. Просто добавьте их обратно и сообщите! Это вызывает ошибки на нашей стороне, когда мы тестируем без кавычек. - person dailymotion; 27.05.2014
comment
Это сделало это. У границы не может быть кавычек, а у имени файла есть. Благодарю вас! - person ScoobySnax; 02.06.2014
comment
Отлично, рады, что смогли вам помочь. Если у вас возникнут какие-либо проблемы в будущем, не стесняйтесь снова использовать Stack Overflow, мы регулярно проверяем здесь. - person dailymotion; 03.06.2014
comment
@ScoobySnax, можете ли вы опубликовать свой код для обхода кавычек? Все, что я пробую, приводит к «Неправильному использованию заголовка». - person tsoporan; 11.06.2014