PHP 代码到 Asp.Net C#
我正在使用 jQuery 网络摄像头插件 和以下代码:
$("#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 () { }
});
该插件使用 < strong>PHP 像这样:
<?php
$str = file_get_contents("php://input");
file_put_contents("/tmp/upload.jpg", pack("H*", $str));
?>
和我的 upload.ashx :
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();
}
我还尝试将字节数组读取到 Bitmap
对象并将其保存到磁盘,但是那也行不通。我真的在这里遗漏了一些东西...
编辑谢谢Onkelborg,
我忘了提及代码不会给出错误,它会保存文件。但图像已损坏。无法在 Windows 照片查看器或 Adobe Photoshop 中查看它们。
Edit2 这也不起作用。 (也损坏图像) 用 C# 保存来自 Webrequest 的图像
Edit3我用它来将字符串转换为高半字节第一个十六进制:
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;
}
Edit4
我找到了这个资源http://www.kirupa.com/forum/showthread.php?300792-XML.sendAndLoad%28%29-not-working-IIS7.-ASP.Net-2.0-%28C-3.0%29 并在我的页面指令中设置 ValidateRequest="false" 。发现是因为我从 https://github 找到了第 183 行。 com/infusion/jQuery-webcam/blob/master/src/jscam.as 我感觉我现在越来越近了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一个也是最大的问题是您尝试从字节转换为字符串,这是错误的。您应该直接保存这些字节,而不以任何方式“转换”它们。
下一个问题是您以错误的方式读取流。请参阅:如何将一个流的内容复制到另一个?
The first, and biggest, problem is the fact that you try to convert from bytes to strings, that's wrong. You should save those bytes directly without "converting" them in any way.
The next problem is that you are reading your stream in the wrong way. See: How do I copy the contents of one stream to another?
答案是:http://code.google.com/p/jpegcam/
因为很难找出如何解码从闪存文件接收到的字节。
现在我只需要在
*.ashx
文件中添加两行 Asp.Net C# 代码:The answer is: http://code.google.com/p/jpegcam/
because it is hard to find out how to decode the bytes you receive from the flash file.
Now I just needed two lines of Asp.Net C# code in my
*.ashx
file: