我想用我的手機拍下應該只包含幾個字母的照片,然后將其發送到服務器,在那里它將圖片轉換為文本字串。
我匯入的包:
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:image_picker/image_picker.dart';
我目前有這個相機功能:
// Camera implementation
File? _image;
final ImagePicker _picker = ImagePicker();
Future getImage() async {
final image = await _picker.pickImage(source: ImageSource.camera);
setState(() {
_image = File(image!.path);
});
}
我在這個按鈕中使用它:
// Camera button
ElevatedButton.icon(
onPressed: getImage,
icon: const Icon(Icons.camera_alt_rounded),
label: const Text('Scan'),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.green[500]),
textStyle: MaterialStateProperty.all(const TextStyle(fontSize: 26)),
)
)
我已經測驗過只將一些資料發送到 jsonplaceholder 并且它可以作業,但是我無法理解如何將它實作為應該發送到我的服務器的圖片。
// Send Data to the Server (TEST VERSION)
postDataTest() async{
try{
var response = await http.post(Uri.parse("https://jsonplaceholder.typicode.com/posts"),
body: {
"id": 1.toString(),
"name": "Hax",
}
);
print(response.body);
} catch(e){
print(e);
}
}
TLDR。我想拍照并將其發送到服務器。
uj5u.com熱心網友回復:
使用多部分
Upload(File img) async {
var uri = Uri.parse(uploadURL);
var request = new http.MultipartRequest("POST", uri);
request.files.add( new http.MultipartFile.fromBytes("file", img.readAsBytesSync(), filename: "Photo.jpg", contentType: new MediaType("image", "jpg")));
var response = await request.send();
print(response.statusCode);
response.stream.transform(utf8.decoder).listen((value) {
print(value);
});
}
uj5u.com熱心網友回復:
Picture to text對于存檔,您需要將影像轉換為 base64。檢查此鏈接
但是,在資料庫中存盤大量二進制資料通常是一個壞主意。您最終將浪費傳輸資料的帶寬。它還會在您讀取大量 blob 資料時降低移動應用程式的性能。您不需要以及不必要的編碼和解碼。
您可以使用 multipart api 請求將圖片發送到服務器。
因此,您可以使用各種包中的 api 歸檔多部分請求
- https -飛鏢檔案
- 迪奧
您還可以在 Stackoverflow 上檢查multipartRequest。
uj5u.com熱心網友回復:
我設法用這個函式解決了它:
// Upload camera photo to server
Future uploadImage() async {
final uri = Uri.parse("url to the server");
var request = http.MultipartRequest('POST', uri);
var takenPicture = await http.MultipartFile.fromPath("image", _image!.path);
request.files.add(takenPicture);
var response = await request.send();
if(response.statusCode == 200){
print('Image uploaded!');
} else{
print('Image not uploaded');
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358501.html
