使用 php 从 dart 将多个文件上传到服务器端

Posted

技术标签:

【中文标题】使用 php 从 dart 将多个文件上传到服务器端【英文标题】:Upload multiple files to server side with php from dart 【发布时间】:2021-08-01 14:09:33 【问题描述】:

.dart

  Future<http.Response> uploadFile(String fileName, List<int> fileBytes) async 
try 
  var request = new http.MultipartRequest("POST", Uri.parse("https://****/***/fileupload.php"));

  for (var i = 0; i < uploadedImage.length; i++) 
    selectedFilesBytes = List.from(uploadedImage[i]);
    request.files.add(http.MultipartFile.fromBytes('file', selectedFilesBytes, contentType: MediaType('application', 'octet-stream'), filename: files[i].name));
  

  print("request.files.length");
  print(request.files.length);
  var streamedResponse = await request.send();

  return await http.Response.fromStream(streamedResponse);
 catch (e) 
  print(e);

文件上传.php

    <?php 

 // Count total files
 $countfiles = count($_FILES['file']);
 error_log($countfiles);
 // Looping all files
 for($i=0;$i<$countfiles;$i++)
   $filename = $_FILES['file']['name'][$i];
   
   // Upload file
   move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
    
 

?>

嗨, 我对从 dart 到 php 的文件上传有问题。当我打印出print(request.files.length); 时,它会给出我选择上传的文件数。 但在 php 端 $countfiles = count($_FILES['file']); 总是返回 1。 为什么会这样?

【问题讨论】:

可能是因为 PHP 无法处理同名的多个参数,除非使用带方括号的“语法”。尝试使用file[] 作为参数名称。 【参考方案1】:

感谢@CBroe 的回答。有用。我添加了最近的代码。

.dart

  Future<http.Response> uploadFile(String fileName, List<int> fileBytes) async 
try 
  var request = new http.MultipartRequest("POST", Uri.parse("https://****/***/fileupload.php"));

  for (var i = 0; i < uploadedImage.length; i++) 
    selectedFilesBytes = List.from(uploadedImage[i]);
    request.files.add(http.MultipartFile.fromBytes('file[]', selectedFilesBytes, contentType: MediaType('application', 'octet-stream'), filename: files[i].name));
  

  print("request.files.length");
  print(request.files.length);
  var streamedResponse = await request.send();

  return await http.Response.fromStream(streamedResponse);
 catch (e) 
  print(e);

.php

<?php 

 // Count total files
 $countfiles = count($_FILES['file']['name']);
 error_log($countfiles);
 // Looping all files
 for($i=0;$i<$countfiles;$i++)
   $filename = $_FILES['file']['name'][$i];
   
   // Upload file
   move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
    
 

?>

【讨论】:

以上是关于使用 php 从 dart 将多个文件上传到服务器端的主要内容,如果未能解决你的问题,请参考以下文章

使用 Summernote File 一次将多个文件上传到服务器

Android 允许将多个文件(最大 150 MB)上传到 PHP 服务器

使用 PHP 上传多个图像,并将条目提交到 mysql

如何使用 PHP、jQuery 和 AJAX 上传多个文件

在 Flutter Web 中上传多个文件(图像)

QHttpMultiPart 上传多个文件