Dart/Flutter - 发布到 PHP 服务器的文件大小为零字节
Dart/Flutter - File Posted to PHP Server is Zero bytes in size
我想 post 一个音频文件到我服务器上的 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 错误日志中没有显示任何错误。
我猜它的发送方式和接收方式之间存在不兼容性,但我是初学者,不确定它在哪里。
知道我能做什么吗?
看来 PEAR 包是浪费时间。该函数已存在于 PHP 中,因此;
<?php
header("Content-Type: audio/mp4");
if (isset($_FILES["audio"]) && $_FILES["audio"]["error"] == 0) {
$uploaddir = '/mynewdirectory/';
$uploadfile = $uploaddir . basename($_FILES['audio']['name']);
if (move_uploaded_file($_FILES['audio']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {echo "Upload failed";}
}
?>
我想 post 一个音频文件到我服务器上的 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 错误日志中没有显示任何错误。
我猜它的发送方式和接收方式之间存在不兼容性,但我是初学者,不确定它在哪里。
知道我能做什么吗?
看来 PEAR 包是浪费时间。该函数已存在于 PHP 中,因此;
<?php
header("Content-Type: audio/mp4");
if (isset($_FILES["audio"]) && $_FILES["audio"]["error"] == 0) {
$uploaddir = '/mynewdirectory/';
$uploadfile = $uploaddir . basename($_FILES['audio']['name']);
if (move_uploaded_file($_FILES['audio']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {echo "Upload failed";}
}
?>