Нужен совет

Информация из первых уст

Наши авторы

Иван Парфенов

Кирилл Анофриев

Павел Егоров

Анна Киросова

Как восстановить электронную книгу

Есть способ для программного восстановления электронных книг - портативных медиа плееров. Способ работает на книгах фирм Effire, Ritmix, Texet, Teclast и др китайского производства. 
 

Подключение внешнего Wi-Fi адаптера к планшету на андроид 4

#!/system/bin/sh

 

ip link set wlan0 down

iwconfig wlan0 channel auto

iwconfig wlan0 Bit 54Mb/s

iwconfig wlan0 essid 'SSID name'

sleep 10

 

Delphi - как послать файл на сервер через прокси

С наступлением майских праздников появилось свободное время, чтобы опубликовать накопившиеся за долгое время найденные решения. На этот раз я поделюсь как посылать на сервер файл используя программу, написанную на delphi. Мне понадобилось данное решение, чтобы посылать на сервер результаты мониторинга с одного устройства на ардуинке. Сразу хочу предвосхитить вопрос, почему бы не использовать отправку через FTP - отвечу, что на данный момент (весна 2013) ни один из свободно распространяемых компонентов для Делфи не может нормально работать через HTTP-proxy. 

Итак начнем. Из исходных данных имеем:

  • корпоративная сеть с выходом в интернет через прокси
  • Delphi 7
  • текстовый файл с данными
  • доступ к хостингу с поддержкой PHP

Создаем на хостинге файл, например uploadfile.php следующего содержания:

<?php
$uploaddir = "uploads"; // Where you want the files to upload to - Important: Make sure this folders permissions (CHMOD) is 0777!
 
if(is_uploaded_file($_FILES['ffile']['tmp_name']))
{
move_uploaded_file($_FILES['ffile']['tmp_name'],$uploaddir.'/'.$_FILES['ffile']['name']);
print "Your file has been uploaded successfully! Yay!";
 
} else {
print "Your file has not been uploaded!!";}
?>
Из содержания видно, что закачиваемые файлы будут располагаться в каталоге 'uploads'  и его атрибуты должны быть 0777. В случае успешного завершения скрипт отправит программе сообщение "Your file has been uploaded successfully! Yay!"
Теперь исходники на Делфи для пересылки файла на сервер:
В секции Uses прописываем новые компоненты:
uses
IdBaseComponent, IdComponent,
IdHTTP, IdMultipartFormData;
Далее, в любом месте программы пишем следующую функцию:
procedure TForm1.sendFileInet(filename: string);
var
 response: string;
 formData: TIdMultipartFormDataStream;
 idhttp1: TIdHTTP;
begin
    idhttp1 := TIdHTTP.Create(nil);
 
    IdHTTP1.ProxyParams.ProxyServer := 'xx.xx.xx.xx'; // your proxy address
    IdHTTP1.ProxyParams.ProxyPort := xxxx; // your proxy port
    IdHTTP1.ProxyParams.BasicAuthentication := False;
    IdHTTP1.ProxyParams.ProxyUsername := '';
    IdHTTP1.ProxyParams.ProxyPassword := '';
 
formData := TIdMultipartFormDataStream.Create;
 
formData.AddFile('ffile', filename, 'text/plain');   // ffile mst be in php-file
IdHTTP1.Request.ContentType := 'multipart/form-data';
try
 response := IdHTTP1.Post('http://yoursite.ru/uploadfile.php', formData);
 mmo1.Lines.Add(response);  // Dispaly response in your log Memo
finally
  IdHTTP1.Free;
  formData.Free;
end;
 
end;
Некоторые пояснения:
Программа имитирует отправку файла через html-форму. Содержимое файла переносится на сервер в поле ffile. Это поле отслеживает скрипт uploadfile.php на сервере. При появлении ошибки "502 Bad Gateway" функция выдает ошибку и программа ожидает действий пользователя.