Обработка двоичного (Excel) файла в мульти-данных Post данных в Suave.IO - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать простое приложение Suave.IO для централизации отправки электронных писем. В настоящее время приложение имеет одну конечную точку, которая принимает тему, тело, получателей, вложения и отправителя в качестве данных формы и превращает их в сообщение электронной почты EWS из учетной записи электронной почты.

В большинстве случаев все работает так, как задумано, но у меня возникает проблема с повреждением файла, когда одно из вложений представляет собой файл Excel. В этих случаях файл кажется поврежденным.

В настоящее время я фильтрую поля request.multipartFields только по тем файлам, которые помечены как файлы вложений, и затем делаю это:

for (fileField: (string*string)) in fileFields do
            let fname = (fst fileField)
            let fpath = "uploadedFiles\\" + fname
            File.WriteAllBytes(fpath, Encoding.ASCII.GetBytes (snd fileField)) |> ignore

Путь к файлу и имена вложений затем передаются в сообщение EWS.

Опять же, это похоже на работу со всеми вложениями, кроме вложений с двоичным кодом. Похоже, что Suave.IO автоматически кодирует все multiPartFields как (строка * строка), что может потребовать специальной обработки, когда это двоичные данные.

Как мне обработать загрузку двоичных файлов?

Спасибо всем заранее.

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, проблема была в кодировке. Я тестировал с использованием интерфейса запросов Python, и по умолчанию файлы кодируются как multipart / form-data. Указав конкретную кодировку для каждого файла, я смог помочь серверу идентифицировать входящие данные как файл.

вместо

requests.post(url, data=data, files={filename: open(filepath, 'rb')})

Мне нужно было сделать

requests.post(url, data=data, files={filename: (filename, open(filepath, 'rb'), mimetypes.guess(filepath)})

Со вторым скриптом Python файлы попадают в раздел файлов запроса, и я смог сохранить файл Excel без повреждения.

...