0

I'm using webcam.js to get photos from a webcam using asp.net web form app. The problem is, I want to get the filename based on the "ID" querystring. But everytime I click "shoot" button, the querystring value is nothing.

Here's my complete HTML :

<%@ Page Language="vb" AutoEventWireup="false"  CodeBehind="Coba.aspx.vb" Inherits="myWebcam.Coba" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script src='<%=ResolveUrl("~/Plugin/jquery.webcam.js")%>' type="text/javascript"></script>
    <script type="text/javascript">
        var pageUrl = '<%=ResolveUrl("~/Coba.aspx")%>';
        $(function (){
           $("#Camera").webcam({
                 width: 320,
                 height: 240,
                 mode: "save",
                 swffile: '<%=ResolveUrl("Plugin/jscam.swf")%>',
                 onTick: function () { },
                 onSave: function () {
                 },
                 onCapture: function () {
                     webcam.save(pageUrl);
                 },
                 debug: function () { },
                 onLoad: function () { }
             });
        });

        function Capture() {

            webcam.capture();

            return false;
        };
     </script>
</head>
<body>
    <form id="form1" runat="server">

    <div>
    <h2>Index</h2>

    <input type="button" value="Shoot!" onclick="Capture()" />
    <div id="Camera"></div>
    </div>
    </form>
</body>
</html>

And here is my asp.net codebehind :

Imports System.IO
Imports System.Web.Services

Public Class Coba
    Inherits System.Web.UI.Page
    Public sID As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        sID = Request.QueryString("id")


        If Not Page.IsPostBack Then

            Capture(Trim(sID))
        End If
    End Sub
    Public Sub Capture(ByVal mID As String)
        Dim stream = Request.InputStream
        Dim dump As String

        If stream.Length > 0 Then

            Using reader = New StreamReader(stream)
                dump = reader.ReadToEnd()
            End Using

            Dim path = Server.MapPath("~/" & Trim(mID) & ".jpg")
            System.IO.File.WriteAllBytes(path, String_To_Bytes2(dump))
        End If
    End Sub

    Private Function String_To_Bytes2(strInput As String) As Byte()
        Dim numBytes As Integer = (strInput.Length) / 2
        Dim bytes As Byte() = New Byte(numBytes - 1) {}

        For x As Integer = 0 To numBytes - 1
            bytes(x) = Convert.ToByte(strInput.Substring(x * 2, 2), 16)
        Next

        Return bytes
    End Function
End Class

The first time I run the page, I can get the "id" value from the querystring. The shoot button trigger the postback and run the "Capture" sub but the "id" querystring returns nothing.

Any solutions for this problem ?

4

1 回答 1

1

I tried the code and I think there is a mistake concept. The plugin does not seem to append any QueryString. Your ID is always Nothing. I made debugging and found no trace of the addition ID in the QueryString.

The file name is an attribute that you assign yourself with your logic. Here is a complete example in which the ID is not recovered.

Even in the official page of the plugin there is no reference to the ID through Querystring.


Other things, you should not use the same page for the interface and saving process. The Pageload is always called, and you call Capture(Trim(sID)) even when loads the interface.

I think you must change this line:

var pageUrl = '<%=ResolveUrl("~/Coba.aspx")%>';

In

var pageUrl = '<%=ResolveUrl("~/Coba_SaveImage.aspx")%>';

And all your codebehind go in the page Coba_SaveImage.aspx. In Page Load is not necessary the If Not Page.IsPostBack Then is always a postback.

Hope this help you.

于 2017-02-05T20:28:18.017 回答