Загрузить файл через HTTP POST в powershell

Я делаю резервную копию своего жесткого диска в облаке с помощью файлового хоста. Этот файловый хост предоставляет API для этого, но я просто не могу заставить его работать на powershell.

На своем веб-сайте API (http://code.google.com/p/filecloud/wiki/Uploading) они утверждают, что «Мы загружаем файл через запрос HTTP POST», поэтому я использую свою надежную функцию POST_Request:

function POST_Request ($url,$parameters) {
$client = New-Object System.Net.WebClient 
$contents = [Text.Encoding]::UTF8.GetString(($client.UploadValues($url,$parameters) ))
return $contents
}

Поскольку их веб-сайт утверждает, что им нужно отправить 2 параметра для загрузки (своего рода идентификатор моей учетной записи и файла), я не могу использовать UploadFile в объекте System.Net.WebClient.

Таким образом, мой вопрос: как я могу передать параметр (идентификатор) И файл для загрузки через POST? (может получится трюк с UploadFile)

Спасибо заранее!


person mechantid    schedule 07.08.2012    source источник


Ответы (1)


Обычно они помещаются в NameValueCollection IIRC, а экземпляр NameValueCollection передается в качестве параметра «значения» в UploadValues(). Вы используете $parameters. Это передается вам или вы создаете это? В любом случае, если это коллекция NameValueCollection, используйте метод Add, чтобы добавить пары имя/значение для необходимых параметров.

person Keith Hill    schedule 07.08.2012
comment
Да, именно это и есть $parameters: $parameters = New-Object Collections.Specialized.NameValueCollection; $parameters["Filedata"] = $file; $parameters["id"]= $MyID - person mechantid; 07.08.2012
comment
После того, как я позвоню POST_Request, я получаю исключение: Exception calling "UploadValues" with "2" argument(s): "The remote server returned an error: (415) Unsupported Media Type." - person mechantid; 07.08.2012
comment
Вы установили заголовок типа контента в запросе? Что ожидает сервер с точки зрения типа файла? Это XML, обычный текст, JSON? Я думаю, вам нужно будет правильно установить заголовок типа содержимого (application/xml, text/plain, application/json). - person Keith Hill; 07.08.2012
comment
Крис Н. Я пытался указать полный путь к файлу. @Keith Hill Я не уверен ... но, может быть, это JSON, как и формат ответа по умолчанию. Извините, что не предоставил эту информацию, я не эксперт, но вы можете взглянуть на это. Спасибо! - person mechantid; 07.08.2012