Однако я не смогу указать поле файла в качестве параметра метода, верно? Так что, если я просто укажу в документации «файл должен быть отправлен в поле POST с именем« Файл »», это создаст какие-либо проблемы, когда мне нужно будет прочитать файл?
Нет причин, по которым вы не можете включить дополнительные параметры POST (или GET, в этом отношении). Я бы, вероятно, сам взял имя файла в качестве дополнительного параметра POST, чтобы клиенты, которые автоматически используют локальное имя файла в запросе, могли легко переименовываться. Если я ожидал конфликта имен, я мог бы даже вернуть выбранное имя сервера в случае конфликтов ... Я думаю, что REST люди используют какой-то код статуса HTTP Created для этого.
Все файлы в двоичном формате, PDF, различные форматы изображений, FLV и так далее. Кроме того, размеры файлов в основном будут в пределах 2-20 МБ, но, учитывая приведенное выше решение, возникнут ли у меня проблемы с приемом файлов в области 250 МБ?
Вам нужно настроить maxRequestLengths и executeTimeouts в web.config. И, если кто-то попытается загрузить 250 МБ по коммутируемому соединению, давайте просто скажем, что это, вероятно, не сработает.
Получение файла таким образом приведет к тому, что файл будет полностью загружен в память, прежде чем я запишу его на диск - есть ли способ обойти это, кроме как позволить службе получать поток и, таким образом, запретить мне принимать другие параметры, и мешает простому использованию сервиса?
ASP.NET 2.0+ помещает загруженные файлы на диск по мере их поступления, чтобы избежать предварительной загрузки всего запроса в ОЗУ. Откорректируйте requestLengthDiskThreshold web.config, в зависимости от ситуации, чтобы сбалансировать скорость и использование памяти. Вы не могли бы взять поток, если бы захотели ... хотя вы можете взять массив byte []. Я действительно не уверен, что это будет означать, хотя ....
Для небольших файлов вы можете сделать base 64, что должно быть тривиально для клиентов. Но для 20 МБ накладные расходы не стоили бы.
Существует множество различных компонентов для загрузки файлов ASP.NET, которые в основном подключаются к Begin_Request в виде HttpModule и перехватывают поток запросов для любых мультипартий / форм-загрузок. В ASP.NET 2.0 это, вероятно, не нужно, если только вы не хотите предоставить какой-то обратный вызов прогресса или что-то в этом роде. Если это так - механика их должна работать с веб-сервисом так же.
RFC 1867 является релевантной спецификацией, но этот загружаемый компонент хорошо показывает, как выглядит запрос, если вы намереваетесь анализировать свой собственный.
Единственный вопросительный знак, который у меня возник бы, это уровень поддержки multipart / form-data в библиотеках http ваших клиентов. Я подозреваю, что это довольно хорошо, но вы можете проверить.