GVKun编程网logo

dart – Flutter:http post上传图片(flutter dio上传图片)

12

如果您想了解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上传图片)

dart – Flutter:http post上传图片(flutter dio上传图片)

我使用Web服务进行图像处理,它在Postman中运行良好:

postman screenshot

现在我想用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的正文字段.
我该如何撰写请求正文?

解决方法

你的解决方法应该有效;许多服务器将接受application / x-www-form-urlencoded作为替代方案(尽管数据编码效率适中).

但是,可以使用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# 通过 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&para2=2&para3=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)

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

dart – Flutter Error:当前的Flutter SDK版本是2.1.0-dev.0.0.flutter-be6309690f

我刚刚升级了我的扑动,升级后我无法在 Android Studio上运行任何扑动项目.我收到此错误消息.

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_built_redux包没有满足Flutter依赖.
错误是由包而不是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`命令失败

dart – Flutter在`flutter`命令失败

我正在遵循 Getting Started with 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版本已过时< 1.9.2.
尝试使用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`命令失败等相关知识的信息别忘了在本站进行查找喔。

本文标签: