Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在c语言中接收并保存ajax发布的图像#_Javascript_C#_Ajax_Image_Post - Fatal编程技术网

Javascript 在c语言中接收并保存ajax发布的图像#

Javascript 在c语言中接收并保存ajax发布的图像#,javascript,c#,ajax,image,post,Javascript,C#,Ajax,Image,Post,我是新手,请原谅我的无知。我使用crapper.js示例将裁剪后的图像发布到内部服务器。我需要在服务器端接收帖子,并将数据保存为图像。我的裁剪器功能如下: document.getElementById('crop').addEventListener('click', function () { var initialAvatarURL; var canvas; $modal.modal(

我是新手,请原谅我的无知。我使用crapper.js示例将裁剪后的图像发布到内部服务器。我需要在服务器端接收帖子,并将数据保存为图像。我的裁剪器功能如下:

          document.getElementById('crop').addEventListener('click', function () {
              var initialAvatarURL;
              var canvas;

              $modal.modal('hide');

              if (cropper) {
                  canvas = cropper.getCroppedCanvas({
                      width: 160,
                      height: 160,
                  });
                  initialAvatarURL = avatar.src;
                  avatar.src = canvas.toDataURL();
                  $progress.show();
                  $alert.removeClass('alert-success alert-warning');
                  canvas.toBlob(function (blob) {
                      var formData = new FormData();

                      formData.append('avatar', blob, 'avatar.jpg');
                      $.ajax('http://localhost:1233/http://localhost:1234/test', {
                          method: 'POST',
                          data: formData,
                          processData: false,
                          contentType: false,

                          xhr: function () {
                              var xhr = new XMLHttpRequest();

                              xhr.upload.onprogress = function (e) {
                                  var percent = '0';
                                  var percentage = '0%';

                                  if (e.lengthComputable) {
                                      percent = Math.round((e.loaded / e.total) * 100);
                                      percentage = percent + '%';
                                      $progressBar.width(percentage).attr('aria-valuenow', percent).text(percentage);
                                  }
                              };

                              return xhr;
                          },

                          success: function () {
                              $alert.show().addClass('alert-success').text('Upload success');
                          },

                          error: function () {
                              avatar.src = initialAvatarURL;
                              $alert.show().addClass('alert-warning').text('Upload error');
                          },

                          complete: function () {
                              $progress.hide();
                          },
                      });
                  });
              }
我正在使用cors anywhere节点代理来处理cors问题以进行测试。我在下面的c#中有一个侦听器示例:

名称空间httplistenerexample
{
班级计划
{
静态void Main(字符串[]参数)
{
StartServer();
Console.ReadKey();
}
公共静态void StartServer()
{
var httpListener=new httpListener();
var simpleServer=新的simpleServer(httpListener,“http://127.0.0.1:1234/test/“,处理您的响应);
simpleServer.Start();
}
公共静态字节[]ProcessYourResponse(字符串测试)
{
控制台写入线(测试);
返回新字节[0];//要返回某些响应时的TODO
}
公共委托字节[]ProcessDataDelegate(字符串数据);
公共类SimpleServer
{
私有常量int HandlerThread=2;
私有只读ProcessDataDelegate处理程序;
私有只读HttpListener侦听器;
公共SimpleServer(HttpListener侦听器、字符串url、ProcessDataDelegate处理程序)
{
this.listener=listener;
this.handler=handler;
listener.Prefixes.Add(url);
}
公开作废开始()
{
if(listener.IsListening)
返回;
listener.Start();
对于(int i=0;i

我可以通过ProcessYourResponse方法中的console.writeline看到屏幕上的图像数据,但似乎不知道如何检索数据并将其保存为文件。我目前以blob的形式发布数据,因此似乎需要使用流来检索二进制数据。这是最好的方法,还是我应该将数据作为base64字符串发布并使用streamreader检索它。简而言之,我需要ProcessYourResponse方法将图像数据保存到文件中。我真的需要一些帮助,因为我已经为此奋斗了几个星期了。提前感谢。

您使用的是http,只能通过添加mime附件或以base64字符串发送二进制数据。创建base64字符串需要时间,并且转换后的数据大于原始二进制数据。检索方法必须与发送方法相同。代码看起来也像是在使用XMLHttpRequest。因此,首先决定如何发送请参见:感谢您的回复,如果我的base64图像源如下所示:src=“data:image/png;base64,ivborw0kggoaaan…suhe9ko5saaaaelftksuqmcc”如何将其格式化为formData元素?您必须执行两个步骤。首先获取base64字符串并转换为字节。然后从字节创建位图。您正在使用http,只能通过添加mime附件或以base64字符串发送二进制数据。创建base64字符串需要时间,并且转换后的数据大于原始二进制数据。检索方法必须与发送方法相同。代码看起来也像是在使用XMLHttpRequest。因此,首先决定如何发送请参见:感谢您的回复,如果我的base64图像源如下所示:src=“data:image/png;base64,ivborw0kggoaaan…suhe9ko5saaaaelftksuqmcc”如何将其格式化为formData元素?您必须执行两个步骤。首先获取base64字符串并转换为字节。然后从字节创建位图。
namespace httplistenerexample
{
    class Program
    {
        static void Main(string[] args)
        {
            StartServer();
            Console.ReadKey();
        }

        public static void StartServer()
        {
            var httpListener = new HttpListener();
            var simpleServer = new SimpleServer(httpListener, "http://127.0.0.1:1234/test/", ProcessYourResponse);
            simpleServer.Start();
        }

        public static byte[] ProcessYourResponse(string test)
        {
            Console.WriteLine(test);
            return new byte[0]; // TODO when you want return some response
        }

        public delegate byte[] ProcessDataDelegate(string data);

        public class SimpleServer
        {
            private const int HandlerThread = 2;
            private readonly ProcessDataDelegate handler;
            private readonly HttpListener listener;

            public SimpleServer(HttpListener listener, string url, ProcessDataDelegate handler)
            {
                this.listener = listener;
                this.handler = handler;
                listener.Prefixes.Add(url);
            }

            public void Start()
            {
                if (listener.IsListening)
                    return;

                listener.Start();

                for (int i = 0; i < HandlerThread; i++)
                {
                    listener.GetContextAsync().ContinueWith(ProcessRequestHandler);
                }
            }

            public void Stop()
            {
                if (listener.IsListening)
                    listener.Stop();
            }

            private void ProcessRequestHandler(Task<HttpListenerContext> result)
            {
                var context = result.Result;

                if (!listener.IsListening)
                    return;

                // Start new listener which replace this
                listener.GetContextAsync().ContinueWith(ProcessRequestHandler);

                // Read request
                string request = new StreamReader(context.Request.InputStream).ReadToEnd();

                // Prepare response
                var responseBytes = handler.Invoke(request);
                context.Response.ContentLength64 = responseBytes.Length;

                var output = context.Response.OutputStream;
                output.WriteAsync(responseBytes, 0, responseBytes.Length);
                output.Close();
            }

        }




    }
}