Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振向Django API发送post请求,并将文件作为主体_Django_File_Flutter_Dart_Http Post - Fatal编程技术网

颤振向Django API发送post请求,并将文件作为主体

颤振向Django API发送post请求,并将文件作为主体,django,file,flutter,dart,http-post,Django,File,Flutter,Dart,Http Post,我有一个Django API,用户可以通过post请求上传文件,其主体如下: { "file": *attached file* } 在Django中,使用request.FILES['file'] 请求必须通过颤振(dart)代码发送。我尝试了几种方法,这是我最近尝试的函数,它显示了一个错误,因为“文件”的格式不正确 static void uploadProfilePhoto(File file, String fileId) async { Uint8Li

我有一个Django API,用户可以通过post请求上传文件,其主体如下:

{
  "file": *attached file*
}
在Django中,使用
request.FILES['file']

请求必须通过颤振(dart)代码发送。我尝试了几种方法,这是我最近尝试的函数,它显示了一个错误,因为“文件”的格式不正确

static void uploadProfilePhoto(File file, String fileId) async {
    Uint8List fileBytes = file.readAsBytesSync();
    var response = http.post(
      globals.baseURL() + "/upload/",
      //headers: {"Content-Type": "application/json"},
      body: {
        "file":base64Encode(fileBytes)
      }
    ).then((v)=>print("v: "+v.body));
  }
你知道颤振应该以什么格式发送“文件”吗?还有没有其他可行的方法?提前感谢。

在颤振中使用

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

  @override
  Future<Map<String, dynamic>> sendFiletodjango(
      {File file,
    }) async {
    var endPoint = url;
    Map data = {};
    String base64file = base64Encode(file.readAsBytesSync());
    String fileName = file.path.split("/").last;
    data['name']=fileName;
    data['file']= base64file;
    try {
      var response = await http.post(endPoint,headers: yourRequestHeaders, body:convert.json.encode(data));
    } catch (e) {
      throw (e.toString());
    }
  }


您可以尝试使用HTTP
post
请求将文件从flatter上传到Django服务器

从Flatter,您可以按如下所示的方式发送
多部分/表单数据
请求

Future<Response> uploadFile(File file) async {
  Response response;
  var uri = Uri.parse(url);
  var request = http.MultipartRequest('POST', uri);
  request.files.add(await http.MultipartFile.fromPath('file', file.path));
  var response = await request.send();
  if (response.statusCode == 200 || response.statusCode == 201) {
    print('Uploaded!');
  }
  return response;
}
Future uploadFile(文件文件)异步{
反应;
var uri=uri.parse(url);
var request=http.MultipartRequest('POST',uri);
add(等待http.MultipartFile.fromPath('file',file.path));
var response=wait request.send();
if(response.statusCode==200 | | response.statusCode==201){
打印('上传!');
}
返回响应;
}

您可以在这里找到更多信息。

如果您使用的是
django rest framework
并且拥有
模型。在模型中的
post
请求中,文件上载将使用
多部分/表单数据
。感谢您的评论。遗憾的是,这对我来说不起作用,我想这是因为它没有rest框架,只是在django中使用request.FILES。你知道这是怎么回事吗?请用postman中的
multipart/form data
试试你的
post
api,看看它是否有效。谢谢你的回答,但不幸的是,我无法修改django代码,你认为有办法解决这个问题吗?你找到发送文件的方法了吗?@MrunalJoshi遗憾的是,我们使用firebase找到了一个解决方法
Future<Response> uploadFile(File file) async {
  Response response;
  var uri = Uri.parse(url);
  var request = http.MultipartRequest('POST', uri);
  request.files.add(await http.MultipartFile.fromPath('file', file.path));
  var response = await request.send();
  if (response.statusCode == 200 || response.statusCode == 201) {
    print('Uploaded!');
  }
  return response;
}