Я хочу загрузить файл в WindChill (это PLM от PT C). Они предоставляют нам REST API со службами для этого. Они разделяют загрузку файла на 3 этапа.
- Этап 1 - Мы вызываем службу, в которой мы указываем количество файлов для загрузки. В этом случае только один.
- Этап 2 - Составная часть / форм-данные, где мы даем файл для загрузки.
- Этап 3 - Последний этап, на котором мы даем имя файла, размер файла и т. д. c ...
Я думаю, что моя проблема на этапе 2. Все этапы выполняются успешно, но когда я пытаюсь открыть загруженный файл в данном случае это pdf, файл пустой, но с тем же количеством страниц оригинала. Я сравниваю содержимое загруженного файла с оригинальным, и содержимое внутри одинаковое с большой разницей. Оригинал с кодировкой ANSI, а загруженный - с кодировкой UTF-8. Итак, я думаю, что моя проблема на этапе 2.
У меня есть некоторые сомнения на этом этапе. В C# я получаю байты [] файла, но в конце мне нужно передать эти байты в строку для отправки в многочастной форме. Какую кодировку я должен использовать для получения строки? Я тестировал по умолчанию, кодировку UTF-8, UNICODE, ASCII, но ничего. Вот пример тела запроса Post. В C# я использую HTTPWebRequest для выполнения запроса.
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844032:844032:844032;
------boundary
Content-Disposition: form-data; name="844032"; filename="newDoc.pdf"
Content-Type: application/pdf
%PDF-1.7 //// The content of the file starts here
%µµµµ
1 0 obj
........
------boundary--
Перед этим подходом я пытался преобразовать байты [] ToBase64String и отправить тело следующим образом:
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844033:844033:844033;
------boundary
Content-Disposition: form-data; name="844033"; filename="newDoc.pdf"
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjcNCiW1tbW1DQox ........ //// The content of the file starts here
------boundary--
В этом случае, когда я пытаюсь открыть файл, я получаю сообщение об ошибке «Не удалось загрузить документ PDF». Файл поврежден.
Я думаю, что проблема на этапе 2, но я поделюсь телом, которое я отправлю на последнем этапе, для вашего понимания.
{"ContentInfo":[{"StreamId":844034,"EncodedInfo": "844034%3A40384%3A9276564%3A844034","FileName": "newDoc.pdf","PrimaryContent": true,"MimeType" : "application/pdf","FileSize" : 40384}]}
StreamId и EncodedInfo - это результаты этапа 2, которые я должен предоставить на этапе 3.
Кто-нибудь может понять, что я делаю неправильно? У кого-нибудь есть советы, которые помогут мне решить эту проблему?
Большое спасибо.