PHP Code to Asp.Net C#
我将jquery网络摄像头插件与以下代码一起使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $("#camera").webcam({ width: 250, height: 375, mode:"save", /*swffile:"js/jscam_canvas_only.swf",*/ swffile:"js/jscam.swf", onTick: function(remain) { if (0 == remain) { jQuery("#status").text("Cheese!"); } else { jQuery("#status").text(remain +" seconds remaining..."); } }, onSave: function () { }, onCapture: function () { webcam.save('/upload.ashx'); }, debug: function () { }, onLoad: function () { } }); |
该插件使用如下PHP:
1 2 3 4 | <?php $str = file_get_contents("php://input"); file_put_contents("/tmp/upload.jpg", pack("H*", $str)); ?> |
和my upload.ashx:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public void ProcessRequest(HttpContext context) { System.IO.Stream str = context.Request.InputStream; int strLen = Convert.ToInt32(str.Length); byte[] strArr = new byte[strLen]; str.Read(strArr, 0, strLen); //string st = BitConverter.ToString(strArr); // try 1 //string st = BitConverter.ToString(strArr).Replace("-",""); // try 2 //string st = ByteArrayToString(strArr); //try 3 string st = String.Concat(Array.ConvertAll(strArr, x => x.ToString("X2"))); // try 4 File.WriteAllText(context.Server.MapPath("~/img/Webcam" + DateTime.Now.Ticks.ToString() +".jpg"), st); } public static string ByteArrayToString(byte[] ba) { StringBuilder hex = new StringBuilder(ba.Length * 2); foreach (byte b in ba) hex.AppendFormat("{0:x2}", b); return hex.ToString(); } |
我还尝试将字节数组读取到
编辑感谢Onkelborg,
我忘了提到代码不会出错,它会保存文件。但是图像被破坏了。无法在Windows照片查看器或Adobe Photoshop中查看它们。
edit2这也不起作用。(还有损坏的图像)将WebRequest中的图像保存到C中#
edit3我使用它将字符串转换为高半字节的第一个十六进制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static byte[] ToHexByte(byte[] arstr) { byte[] data = new byte[arstr.Length]; int end = arstr.Length; for (int i = 0; i < end; i++) { byte ch = arstr[i]; byte highNibble = (byte)((ch & 0xf0) >> 4); byte lowNibble = (byte)((ch & 0x0f) << 4); data[i] = (byte)(highNibble | lowNibble); } return data; } |
编辑4
我找到了这个资源http://www.kirupa.com/forum/showthread.php?300792-xml.sendandload%28%29-not-working-iis7.-asp.net-2.0-%28c-3.0%29在我的页面指令中设置
答案是:http://code.google.com/p/jpegcam/因为很难找到如何解码从闪存文件接收到的字节。
现在我只需要在我的
1 2 3 | byte[] data = context.Request.BinaryRead(context.Request.TotalBytes); File.WriteAllBytes(context.Server.MapPath("~/img/cam" + DateTime.Now.Ticks +".jpg"), data); |
第一个也是最大的问题是,您试图将字节转换为字符串,这是错误的。您应该直接保存这些字节,而不必以任何方式"转换"它们。
下一个问题是,您以错误的方式读取流。请参见:如何将一个流的内容复制到另一个流?