Arhn - архитектура программирования

Могу ли я использовать httprequest для автоматической публикации файла так же, как при обычной загрузке?

Я застрял на чем-то, что (я думаю) должно быть довольно простым, но я не могу понять, как это сделать. Я не могу найти никакой информации ни здесь, ни в SO, ни в Google.

У нас есть веб-приложение, которое берет данные с нашего сайта и автоматически ОТПРАВЛЯЕТ их в другой API.

Мы также хотели бы отправить двоичный файл — например, мы бы взяли файл с локального URL-адреса и отправили его содержимое на другой сайт.

Может ли кто-нибудь указать мне в правильном направлении для этого? Например, нужно ли мне каким-то образом вставлять URL-адрес файла в данные и POST как составные данные/формы?


  • К другому API? Куда/кому вы отправляете данные? 07.08.2013
  • Это доска объявлений. Мы пытаемся опубликовать резюме /cv 07.08.2013

Ответы:


1

Я создал эту классическую функцию ASP для отправки файла на другой сервер. Надеюсь, это поможет и вам.

Function PostDocument(intDocumentID, binFile, strFilename, strContentType)
Dim objHttp, strBoundary, strRequestStart, strRequestEnd, binPost
Dim objStream

strBoundary = "---------------------------9849436581144108930470211272"

Set objHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

strRequestStart = "--" & strBoundary & vbCrlf &_
    "Content-Disposition: form-data; name=""id""" & vbCrlf &_
    vbCrlf &_
    intDocumentID & vbCrlf &_
    vbCrlf &_
    "--" & strBoundary & vbCrlf &_
    "Content-Disposition: form-data; name=""file""; filename=""" & strFilename & """" & vbCrlf &_
    "Content-Type: " & strContentType & vbCrlf &_
    vbCrlf

strRequestEnd = vbCrLf & "--" & strBoundary & "--"

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Type = adTypeBinary '1
objStream.Mode = adModeReadWrite '3
objStream.Open
objStream.Write StringToBinary(strRequestStart)
objStream.Write binFile
objStream.Write StringToBinary(strRequestEnd)
objStream.Position = 0

binPost = objStream.Read

Response.Write binPost

objStream.Close
Set objStream = Nothing

objHttp.Open "POST", "(url removed)", False, "(username removed)", "(password removed)"
objHttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=""" & strBoundary & """"
objHttp.Send binPost

PostDocument = objHttp.ResponseText

Set objHttp = Nothing
End Function

Function StringToBinary(toConvert)
Dim objStream, data

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Charset = "ISO-8859-1"
objStream.Type = adTypeText '2
objStream.Mode = adModeReadWrite '3
objStream.Open
objStream.WriteText toConvert

objStream.Position = 0
objStream.Type = adTypeBinary '1
StringToBinary = objStream.Read

objStream.Close
Set objStream = Nothing
End Function
05.08.2013
  • Спасибо, Джон, я попробую :) 06.08.2013
  • (3 дня спустя) почти готово..... могу я спросить... что происходит с двумя заголовками Content Disposition в strRequestStart? 09.08.2013
  • Первый для поля формы (intDocumentId - изменить на то, что вам нужно передать в дополнение к файлу), второй для самого файла. Вам понадобится больше, если вы хотите передать более одного поля или файла в одном запросе. 10.08.2013
  • Спасибо, что вернулись ко мне спустя столько времени. :) Означает ли это, что если я просто публикую сам файл, я могу игнорировать первый? 10.08.2013
  • Я на 90% заставил его работать, но файлы, которые я публикую, кажутся поврежденными, когда я загружаю их из места назначения. Есть ли шанс, что вы могли бы взглянуть на код, размещенный здесь, и сказать мне, есть ли что-то очевидное, что я сделал неправильно? stackoverflow.com/questions/18155243/ 10.08.2013
  • Извините, я не мог вернуться сюда, чтобы помочь до сих пор. Удалось ли вам разобраться с проблемой? 25.08.2013
  • Спасибо и почти! Где-то я получаю дополнительные нулевые/нулевые байты, добавляемые в конец моих опубликованных файлов, но я не могу понять, откуда это берется. Я решил, что это заслуживает отдельного вопроса: stackoverflow.com/questions/18341803/ (проверьте обновление внизу ) 02.09.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..