File Flitter中的WSDL文件上载?

File Flitter中的WSDL文件上载?,file,http,flutter,upload,httpurlconnection,File,Http,Flutter,Upload,Httpurlconnection,我是个新手。我正在寻找一些关于如何正确使用颤振的HHTP库的指导 我的挑战是使用WSDL服务来上传图片。这里有两个代码(flatter和Java),它们使用相同的WSDL执行相同的功能。Java工作 我使用以下示例构建了我的颤振代码:如何在颤振中上传图像 但我下面的颤振代码返回服务器错误500:请参阅下面的屏幕截图以获取参考和清晰性 Future<bool> sentPhotoTransaction () async { // URL includes two parameter

我是个新手。我正在寻找一些关于如何正确使用颤振的HHTP库的指导

我的挑战是使用WSDL服务来上传图片。这里有两个代码(flatter和Java),它们使用相同的WSDL执行相同的功能。Java工作

我使用以下示例构建了我的颤振代码:如何在颤振中上传图像

但我下面的颤振代码返回服务器错误500:请参阅下面的屏幕截图以获取参考和清晰性

Future<bool> sentPhotoTransaction () async {
 // URL includes two parameter plus the image file stream.
 String cIPhotoPath = "/storage/emulated/0/Android/data/com.saleson24.saleson24/files/Pictures/scaled_IMG_20200414_161101.jpg";
 String urlString = "http://pro.test.com/ImgHandler.WCFHost/FileManagerService.svc/UploadFile?MobID=20A47616&Sig=b6e61d4e3ee38";
Io.File imageFile;
 imageFile = new Io.File(cIPhotoPath);
 // ***************** create multipart request for POST *****************
 var request = http.MultipartRequest("POST", Uri.parse(urlString));
 // ***************** create multipart using filepath, string or bytes *****************
 var picture = await http.MultipartFile.fromPath("stream", imageFile.path);
 // ***************** add multipart for the picture to request *****************
 request.files.add(picture);
 try {
   var response = await request.send();
   if (response.statusCode == 200) {
     print("Success");
     return true;
   } else {
     print("POST request did not worked");
     return false;
   }
 } catch(e) {
   print(e.toString());
   return false;
 }
}

如何使用上面的HTTP库获得上面的颤振代码?HHTP库是使用WSDL的正确库吗

感谢您的指导。

呆在家里。注意安全

在Dart中,目前您正在使用一个多部分请求,而在Java中,您正在发送一个流。我建议也尝试发送一条流。尝试使用奇妙的库来完成它

其中有一个发送示例:

//二进制数据
列表postData=[…];
等待迪奥发帖(
网址,
数据:Stream.fromIterable(postData.map((e)=>[e]),//创建一个流
选项:选项(
标题:{
Headers.contentLengthHeader:postData.length,//设置内容长度
},
),
);

如果你需要更多的评论,请告诉我。希望它能起作用。

此代码扩展了上面的洛伦佐答案。这个代码对我有用,希望能帮助别人

    String photoPath = "";      // Your photo location path.
    Io.File file = new Io.File(photoPath);
    var dio = Dio();
    // ***************** Transfer File *****************
    try {
// Convert file to Bytes WITHOUT compression.
//          List<int> postData = await file.readAsBytes();                      
// Convert file to Bytes WITH compression.
          List<int> postData = await compressImageFileAndReturnList(file);      
      var response = await dio.post(urlString,
          data: Stream.fromIterable(postData.map((e) => [e])),
          options: Options(
              followRedirects: false,
              headers: {
                Headers.contentLengthHeader: postData.length, // set content-length
              }
          )
      );
      if (response.statusCode == 200) {
        print("Success");
        return true;
      } else {
        print("POST request did not worked");
        return false;
      }
    } catch(e) {
      print(e.toString());
      return false;
    }
String photoPath=“”;//您的照片位置路径。
Io.File文件=新的Io.File(光路);
var-dio=dio();
//*******************传输文件*****************
试一试{
//无需压缩即可将文件转换为字节。
//List postData=wait file.readAsBytes();
//通过压缩将文件转换为字节。
List postData=等待压缩图像文件和返回列表(文件);
var response=wait dio.post(urlString,
数据:Stream.fromIterable(postData.map((e)=>[e]),
选项:选项(
followRedirects:false,
标题:{
Headers.contentLengthHeader:postData.length,//设置内容长度
}
)
);
如果(response.statusCode==200){
打印(“成功”);
返回true;
}否则{
打印(“POST请求不起作用”);
返回false;
}
}捕获(e){
打印(如toString());
返回false;
}

我假设图片数据进入列表postData=[…]的定义;我是如何做到这一点的?我想是这样的:List fileBytes=await file.readAsBytes();您缺少将图像压缩到较低分辨率的代码。问题在于请求,而不是图像。嗨,Lorenzo,感谢您的帮助和快速回复。从概念上讲,你上面的答案是好的。但是就像Richard提到的,代码是不完整的。但我成功了。我将很快发布完整的代码示例。Do给了我研究DIO图书馆的想法。我还使用http.MultipartRequest库实现了它。我试图找出HTTP和DIO库哪一个最好、更快。
    String photoPath = "";      // Your photo location path.
    Io.File file = new Io.File(photoPath);
    var dio = Dio();
    // ***************** Transfer File *****************
    try {
// Convert file to Bytes WITHOUT compression.
//          List<int> postData = await file.readAsBytes();                      
// Convert file to Bytes WITH compression.
          List<int> postData = await compressImageFileAndReturnList(file);      
      var response = await dio.post(urlString,
          data: Stream.fromIterable(postData.map((e) => [e])),
          options: Options(
              followRedirects: false,
              headers: {
                Headers.contentLengthHeader: postData.length, // set content-length
              }
          )
      );
      if (response.statusCode == 200) {
        print("Success");
        return true;
      } else {
        print("POST request did not worked");
        return false;
      }
    } catch(e) {
      print(e.toString());
      return false;
    }