2013-03-21 2 views
3

У меня есть простой сервер DataSnap REST, на TWebModule я добавил действие для прослушивания запроса POST на пути «/ upload_file». На мероприятии OnAction у меня есть этот код:TWebResponse не анализирует мои опубликованные файлы

procedure TWebModule.WebModulePostFileAction(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
var i: Integer; 
    str: String; 
begin 
    for i :=0 to Request.Files.Count-1 do 
    Begin 
    Str:= Str +','+ Request.Files.Items[i].FileName; 
    // I will like to save or move the uploaded file to i.e. c:\myFiles\ 
    End; 
    Response.Content:= Str; 
end; 

Request.Files.Count всегда 0, но когда я проверить объект Request.content, я могу увидеть многослойное содержимое файла. как я могу получить опубликованный файл из запроса? и сохраните его где-нибудь на диске.
Моего HTML форма, где я м проводка выглядит так:

<form action="/upload_file" method="POST" enctype="multipart/form-data"> 
    Notes: <input type="text" name="notes"/> 
    File: <input type="file" name="my_file"/> 
    <input type="submit" value="Submit"> 
</form> 

К сожалению, нет много информации по этой теме, я пыталась много вещи в течение нескольких часов, но не успех. Спасибо заранее.

+0

xxm может обрабатывать файлы с файлами multipart/form-data изначально, есть даже поддержка для чтения результатов загрузки из других запросов: http://xxm.sourceforge.net/ есть пример здесь https://sourceforge.net/p/xxm/code/HEAD/tree/trunk/Delphi/demo2/09% 20Upload% 20Progress/ –

+0

К сожалению, мой проект использует DataSnap и пишет другое приложение, чтобы просто обрабатывать закачки, кажется мне сложнее добавить к существующему проект. спасибо за совет. –

ответ

0

См родственный вопрос TIdHTTPServer file upload и ответить https://stackoverflow.com/a/6197138/80901:

TIdHTTPServer в настоящее время не поддерживает многотомные/form-данные представления изначально. То есть в списке задач для Indy 11. В то время как в вы должны вручную разобрать опубликованные данные MIME, используя TIdDecoderMIME, как предположил mjn. Были примеры того, что размещены на форумах Embarcadero и Indy.

+0

Я действительно ищу способ справиться с этим через DataSnap, а не Indy; но рекомендуется использовать TIdDecoderMIME для анализа данных. Я буду продолжать попытки, и я отправлю свой код на случай, если я все выясню. Спасибо за ответ. –

+0

IIRC DataSnap внутренне использует Indy - поэтому, если DataSnap каким-либо образом не реализует эту недостающую функцию, связанное обходное решение является опцией – mjn

Смежные вопросы