颤振向Django API发送post请求,并将文件作为主体
我有一个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
{
"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;
}