Dart/Flutter - 发布到 PHP 服务器的文件大小为零字节

我想将音频文件发布到我的服务器上的 PHP 页面。尽管该文件假装正在上传,但其大小为零字节。这是我调用的方法;


import 'dart:async';

import 'package:http/http.dart' as http;

import 'package:http_parser/http_parser.dart';


Future<String> uploadAudio() async {

  final serverurl = "http://example.com/audiotest2.php?";

  var request = http.MultipartRequest('POST', Uri.parse(serverurl));

  var multiPartFile = await http.MultipartFile.fromPath("audio", filepath, contentType: MediaType("audio", "mp4"));


  request.files.add(multiPartFile);      

  request.send().then((result) async {http.Response.fromStream(result)

        .then((response) {

      if (response.statusCode == 200)

      {

       print('response.body '+response.body);

      }

      return response.body;

    });

  });

}

这是后端的 php,我意识到这段代码是不安全的,但这只是临时的,因为我不太熟悉 mysql,只需要保持简单即可使其工作。我正在使用 PHP_Compat-1.6.0a3 Pear 包来获取文件内容。当我使用 App Inventor 而不是 Dart/Flutter 时,它工作正常;


 <?php 

header("Content-Type: audio/mp4");

require_once (dirname(__FILE__).'/PHP_Compat-1.6.0a3/Compat/Function/file_get_contents.php');


    $data = php_compat_file_get_contents('php://input');

    $audioname = 'Test.m4a';


    if (file_put_contents($audioname,$data)) {echo "File Saved";} else {echo "File not Saved ";} 

    if (filesize($audioname) != 0) {echo " Recording Saved.";} else {echo " File size zero.";}      

    ?>

我在 Android Studio 控制台中遇到的错误是;


 response.body File not Saved  File size zero.

Test.M4a 文件出现在我的服务器上,但内容为空,字节为零。但我的服务器上的 PHP 错误日志中没有显示任何错误。


我猜测发送方式和接收方式之间存在不兼容,但我是初学者,不确定它在哪里。


知道我能做什么吗?


慕码人8056858
浏览 120回答 1
1回答

当年话下

看来 PEAR 包是浪费时间。该函数已经存在于 PHP 中,因此;<?php&nbsp;header("Content-Type: audio/mp4");&nbsp;&nbsp; &nbsp; if (isset($_FILES["audio"]) && $_FILES["audio"]["error"] == 0) {&nbsp; &nbsp; $uploaddir = '/mynewdirectory/';&nbsp; &nbsp; $uploadfile = $uploaddir . basename($_FILES['audio']['name']);&nbsp; &nbsp;&nbsp; &nbsp; if (move_uploaded_file($_FILES['audio']['tmp_name'], $uploadfile)) {&nbsp; &nbsp; &nbsp; echo "File is valid, and was successfully uploaded.\n";&nbsp; &nbsp; } else {echo "Upload failed";}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }&nbsp;?>
打开App,查看更多内容
随时随地看视频慕课网APP