Как отправить изображение из приложения Android на Ftp-сервер? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь отправить изображение из Android-приложения Flutter на ftp-сервер по http-запросу, используя php ftp_put(), но получаю:

ftp_put(File: '/storage/emulated/0/Android/data/br.com.dannilosn.maisservico/files/Pictures/scaled_f11abeeb-08b2-4ef3-bbaf-978ce01066f83153399647709822912.jpg'): failed to open stream: No such file or directory in /mnt/Backup/Git/mais-servicos-server/servidor/ftp/funcoes/enviar_arquivo.php

Путь: "/storage/emulated/0/Android/data/br.com.dannilosn.maisservico/files/Pictures/scaled_db8a8040-3c45-453a-946b-701bed9815ec7965385997102163330.jpg".

Код Ftp:

class Ftp{
  Ftp(ip){
    this._ip = ip;
    _url = _HOST + _ip +_PATH;
  }

  static const String _HOST = "http://";
  static const String _PATH = "/servidor/ftp/funcoes/";
  String _ip;
  String _url;

  static const String _ENVIAR_ARQUIVO = "enviar_arquivo.php";

  Future<dynamic> enviarArquivo(String origem) async{
    var response = await http.get(
      _url + _ENVIAR_ARQUIVO +
      "?origem=$origem"
    );
    if(response.statusCode == 200){
      var res = response.body;//convert.jsonDecode(response.body);
      print("Enviar arquivo: ${res.toString()}");
      return res;
    }
  }

}

enviar_arquivo.php:

<?php

$ftp_host = "*******";
$ftp_user = "*******";
$ftp_pass = "*******";

$ftp_stream = ftp_connect($ftp_host);

if(!ftp_login($ftp_stream, $ftp_user, $ftp_pass)){
    echo "Não conseguiu se conectar";
    exit();
}

$destino = "/servidor/ftp/arquivos/teste.jpg";
$origem = $_GET["origem"];

ftp_pasv($ftp_stream, true);

$resposta = ftp_put($ftp_stream, $destino, $origem, FTP_BINARY);
if($resposta){
    echo "OK";
}else{
    echo "Arquivo não enviado";
}

ftp_close($ftp_stream);

?>

Если я ищу с помощью файлового менеджера, есть файл.

Должен ли я сделать что-то другое, чтобы получить файл на Android или что-то в php?

1 Ответ

0 голосов
/ 19 июня 2019

Ваш сервер HTTP / PHP не может получить доступ к файлу на клиенте (Android) по его пути (Это было бы ужасным недостатком безопасности) .

Вы должны отправить фактический контент в HTTP / PHP.

По аналогичному вопросу см .:
Загрузка локального файла из приложения через веб-сервер с кодом PHP на FTP-сервер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...