如果您想了解dart–Flutter:httppost上传图片和flutterdio上传图片的知识,那么本篇文章将是您的不二之选。我们将深入剖析dart–Flutter:httppost上传图片的各个
如果您想了解dart – Flutter:http post上传图片和flutter dio上传图片的知识,那么本篇文章将是您的不二之选。我们将深入剖析dart – Flutter:http post上传图片的各个方面,并为您解答flutter dio上传图片的疑在这篇文章中,我们将为您介绍dart – Flutter:http post上传图片的相关知识,同时也会详细的解释flutter dio上传图片的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- dart – Flutter:http post上传图片(flutter dio上传图片)
- C# 通过 http post 请求上传图片和参数
- C#模拟POST上传文件帮助类(支持https、http)
- dart – Flutter Error:当前的Flutter SDK版本是2.1.0-dev.0.0.flutter-be6309690f
- dart – Flutter在`flutter`命令失败
dart – Flutter:http post上传图片(flutter dio上传图片)
现在我想用Dart扑灭http请求:
import 'package:http/http.dart' as http; static ocr(File image) async { var url = '${API_URL}ocr'; var bytes = image.readAsBytesSync(); var response = await http.post( url,headers:{ "Content-Type":"multipart/form-data" },body: { "lang":"fas","image":bytes},encoding: Encoding.getByName("utf-8") ); return response.body; }
但是我不知道如何上传图像文件,在上面的代码中我得到异常:错误状态:无法使用内容类型“multipart / form-data”设置Request的正文字段.
我该如何撰写请求正文?
解决方法
但是,可以使用dart:http来执行此操作.而不是使用http.post,您将需要使用http.multipartfile对象.
从dart documentation:
var request = new http.MultipartRequest("POST",url); request.fields['user'] = 'someone@somewhere.com'; request.files.add(http.multipartfile.fromPath( 'package','build/package.tar.gz',contentType: new MediaType('application','x-tar'),)); request.send().then((response) { if (response.statusCode == 200) print("Uploaded!"); });
C# 通过 http post 请求上传图片和参数
一、C# Winform 或控制台
/// <summary>
/// 通过http上传图片及传参数
/// </summary>
/// <param name="imgPath">图片地址(绝对路径:D:\demo\img\123.jpg)</param>
public void UploadImage(string imgPath)
{
var uploadUrl = "http://localhost:3020/upload/imgup";
var dic = new Dictionary<string, string>() {
{"para1",1.ToString() },
{"para2",2.ToString() },
{"para3",3.ToString() },
};
var postData = Utils.BuildQuery(dic);//转换成:para1=1¶2=2¶3=3
var postUrl = string.Format("{0}?{1}", uploadUrl, postData);//拼接url
HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
request.AllowAutoRedirect = true;
request.Method = "POST";
string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
int pos = imgPath.LastIndexOf("\\");
string fileName = imgPath.Substring(pos + 1);
//请求头部信息
StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
FileStream fs = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
byte[] bArr = new byte[fs.Length];
fs.Read(bArr, 0, bArr.Length);
fs.Close();
Stream postStream = request.GetRequestStream();
postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
postStream.Write(bArr, 0, bArr.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
string content = sr.ReadToEnd();
}
二、图片接收接口
[ValidateInput(false)]
public JsonResult imgup(string para1,string para2,string para3)
{
if (Request.Files.Count > 0)
{
//传过来的图片
var file = Request.Files[0];
//保存到本地或服务器
}
return new JsonResult { };
}
C#模拟POST上传文件帮助类(支持https、http)
https://www.cnblogs.com/JustinLau/archive/2020/02/25/12362794.html
public static int PostFile(string getUrl, CookieContainer cookieContainer, HttpHeader header, string postdata, byte[] postdatabyte, Stream sm)
{
Stream fileStream;
if (sm != null)
{
fileStream = sm;
}
else
{
fileStream = new MemoryStream(postdatabyte);
}
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls;//https形式需要添加
int returnValue = 0;
fileStream.Position = 0;
var r = new BinaryReader(fileStream);
string strBoundary = "--"+ DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "--\r\n");
//请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"importType\"");
sb.Append("\r\n\r\n1");
sb.Append("\r\n");
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"file\"; filename=\"1.xls\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
try
{
// 根据uri创建HttpWebRequest对象
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(getUrl));
httpReq.Method = "POST";
//对发送的数据不使用缓存
httpReq.AllowWriteStreamBuffering = false;
//设置获得响应的超时时间(300秒)
httpReq.Timeout = 300000;
//httpReq.ServicePoint.Expect100Continue = false;
httpReq.CookieContainer = cookieContainer;
httpReq.Accept = header.accept;
//httpReq.Headers.Add("Accept-Encoding","gzip, deflate, br");
//httpReq.Headers.Add("TE", "Trailers");
httpReq.UserAgent = header.userAgent;
httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
long fileLength = fileStream.Length;
httpReq.ContentLength = length;
byte[] buffer = new byte[fileLength];
Stream postStream = httpReq.GetRequestStream();
//发送请求头部消息
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
int size = r.Read(buffer, 0, buffer.Length);
postStream.Write(buffer, 0, size);
//添加尾部的时间戳
postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
postStream.Close();
//获取服务器端的响应
HttpWebResponse webRespon = (HttpWebResponse)httpReq.GetResponse();
if (webRespon.StatusCode == HttpStatusCode.OK) //如果服务器未响应,那么继续等待相应
{
Stream s = webRespon.GetResponseStream();
StreamReader sr = new StreamReader(s);
//读取服务器端返回的消息
String sReturnString = sr.ReadLine();
s.Close();
sr.Close();
fileStream.Close();
returnValue=returnValue;
}
}
catch (Exception ex)
{
UnionLog.WriteLog(LogType.UNION_ERROR, string.Format("导入Excel失败:{0}", ex.Message));
}
return returnValue;
}
特别注意:代码中包括“--”的地方不可以随意更改,否则踩坑。
dart – Flutter Error:当前的Flutter SDK版本是2.1.0-dev.0.0.flutter-be6309690f
The current Dart SDK version is 2.1.0-dev.0.0.Flutter-be6309690f. Because buddy depends on Flutter_built_redux 0.4.5 which requires SDK version >=1.19.0 <2.0.0,version solving Failed. pub get Failed (1)
如何降级Dart或如何解决此问题,我在mac上运行android studio.
我试过通过改变颤动的通道开发和主人,但它并没有什么区别.
扑医生-v结果:
[✓] Flutter (Channel dev,v0.6.0,on Mac OS X 10.13.4 17E202,locale en-IN) • Flutter version 0.6.0 at /Users/pro/Downloads/Flutter • Framework revision 9299c02cf7 (5 days ago),2018-08-16 00:35:12 +0200 • Engine revision e3687f70c7 • Dart version 2.1.0-dev.0.0.Flutter-be6309690f [✓] Android toolchain - develop for Android devices (Android SDK 27.0.3) • Android SDK at /Users/pro/Library/Android/sdk • Android NDK location not configured (optional; useful for native profiling support) • Platform android-27,build-tools 27.0.3 • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 1.8.0_152-release- 1024-b01) • All Android licenses accepted. [✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1) • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 9.4.1,Build version 9F2000 • ios-deploy 1.9.2 • CocoaPods version 1.5.0 [✓] Android Studio (version 3.1) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin version 27.1.1 • Dart plugin version 173.4700 • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01) [!] Connected devices ! No devices available
解决方法
错误是由包而不是Flutter sdk引起的.
看这里
https://github.com/davidmarne/flutter_built_redux/blob/master/pubspec.yaml#L22
和
您可以使用此链接在Flutter_built_redux包上发布问题
https://github.com/davidmarne/flutter_built_redux/issues/new?title=support%20for%20flutter%20sdk%202.1.0.dev&body=please%20upgrade%20the%20package%20for%20new%20flutter%20releases
dart – Flutter在`flutter`命令失败
Flutter init -o my_app Resolving dependencies... Error on line 17,column 16 of pubspec.yaml: Invalid version constraint: Could not parse version "^1.4.0". UnkNown text at "^1.4.0". stack_trace: ^1.4.0 ^^^^^^ Unhandled exception: Uncaught Error: filesystemexception: Cannot open file,path = '/Users/craig/Code/Flutter/packages/Flutter_tools/packages/sky_tools/executable.dart' (OS Error: No such file or directory,errno = 2) Stack Trace: #0 _File.open.<anonymous closure> (dart:io/file_impl.dart:349) #1 _RootZone.runUnary (dart:async/zone.dart:1151) #2 _Future._propagatetoListeners.handleValueCallback (dart:async/future_impl.dart:496) #3 _Future._propagatetoListeners (dart:async/future_impl.dart:579) #4 _Future._completeWithValue (dart:async/future_impl.dart:339) #5 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:401) #6 _asyncruncallbackLoop (dart:async/schedule_microtask.dart:41) #7 _asyncruncallback (dart:async/schedule_microtask.dart:48) #8 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:84) #9 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:131) #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:883) #1 _asyncruncallbackLoop (dart:async/schedule_microtask.dart:41) #2 _asyncruncallback (dart:async/schedule_microtask.dart:48) #3 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:84) #4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:131) Unhandled exception: Uncaught Error: filesystemexception: Cannot open file,path = '/Users/craig/Code/Flutter/bin/cache/Flutter_tools.snapshot' (OS Error: No such file or directory,errno = 2) Stack Trace: #0 _File.open.<anonymous closure> (dart:io/file_impl.dart:349) #1 _RootZone.runUnary (dart:async/zone.dart:1151) #2 _Future._propagatetoListeners.handleValueCallback (dart:async/future_impl.dart:496) #3 _Future._propagatetoListeners (dart:async/future_impl.dart:579) #4 _Future._completeWithValue (dart:async/future_impl.dart:339) #5 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:401) #6 _asyncruncallbackLoop (dart:async/schedule_microtask.dart:41) #7 _asyncruncallback (dart:async/schedule_microtask.dart:48) #8 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:84) #9 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:131) #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:883) #1 _asyncruncallbackLoop (dart:async/schedule_microtask.dart:41) #2 _asyncruncallback (dart:async/schedule_microtask.dart:48) #3 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:84) #4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:131)
解决方法
尝试使用dart –version获取已安装的Dart SDK的版本.
当前是1.12.x.
更新2018-03-20
在迁移阶段到Dart 2期间,您可能希望从开发通道安装Dart以获得2.0.0-alpha.x版本.
最新的稳定版本是1.24.x
例如
brew install dart --devel
更新2018-06-21
现在也支持:
brew install dart@2
关于dart – Flutter:http post上传图片和flutter dio上传图片的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C# 通过 http post 请求上传图片和参数、C#模拟POST上传文件帮助类(支持https、http)、dart – Flutter Error:当前的Flutter SDK版本是2.1.0-dev.0.0.flutter-be6309690f、dart – Flutter在`flutter`命令失败等相关知识的信息别忘了在本站进行查找喔。
本文标签: