VintaSoft Twain .NET SDK v10.2
How to upload acquired image onto HTTP(S) server?

Example: Here is an example that shows how to upload acquired image as JPEG file onto HTTP server.

Dim _parentForm As Form
Dim _uploadStatus As TextBox
Dim _progressBar As ProgressBar

Dim _httpUpload As HttpUpload

Dim _sendingData As Boolean = False


' Upload acquired image to HTTP server.
Private Sub UploadAcquiredImageAsJpegToHttp(ByVal acquiredImage As AcquiredImage)
    Try
        ' create HTTP uploader
        _httpUpload = New HttpUpload(_parentForm)

        ' subscribe to the events
        AddHandler _httpUpload.StatusChanged, AddressOf _httpUpload_StatusChanged
        AddHandler _httpUpload.ProgressChanged, AddressOf _httpUpload_ProgressChanged
        AddHandler _httpUpload.Completed, AddressOf _httpUpload_Completed

        ' set HTTP upload parameters
        _httpUpload.Url = "http://demos.vintasoft.com/WebTwainDemo/ImageUpload.aspx"
        _httpUpload.AddTextField("user", "guest")
        _httpUpload.AddTextField("password", "guest")
        _httpUpload.AddFileField("file", "demo.jpg", acquiredImage.GetAsStream(New TwainJpegEncoderSettings()))

        ' post data to the server
        _httpUpload.PostData()
    Catch ex As Exception
        _uploadStatus.Text = String.Format("{0}{1}", _uploadStatus.Text, ex)
    Finally
        ' set maximal value of the progress bar
        _progressBar.Maximum = _httpUpload.BytesTotal
    End Try
End Sub

' Handler of the upload status changed event.
Private Sub _httpUpload_StatusChanged(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageUploading.Http.StatusChangedEventArgs)
    If _sendingData Then
        _uploadStatus.Text = String.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine)
        _sendingData = False
    End If

    ' show current upload status in the status string
    _uploadStatus.Text = String.Format("{0}{1}{2}", _uploadStatus.Text, e.StatusString, Environment.NewLine)
End Sub

' Handler of the upload progress event.
Private Sub _httpUpload_ProgressChanged(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageUploading.Http.ProgressChangedEventArgs)
    ' show the size of uploading data (once per upload)
    If Not _sendingData Then
        _uploadStatus.Text = String.Format("{0}({1} bytes){2}", _uploadStatus.Text, e.BytesTotal, Environment.NewLine)
        _sendingData = True
    End If

    ' show current upload progress in progress bar
    _progressBar.Value = e.BytesUploaded

    ' show current upload progress, in bytes, in the status string
    _uploadStatus.Text = String.Format("{0}{1} ", _uploadStatus.Text, e.BytesUploaded)
End Sub

' Handler of the upload completed event.
Private Sub _httpUpload_Completed(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageUploading.Http.CompletedEventArgs)
    _uploadStatus.Text = String.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine)

    If e.ErrorCode = 0 Then  ' if no errors
        If e.ResponseCode = Net.HttpStatusCode.OK Then  ' if server returned "OK" status
            _uploadStatus.Text = String.Format("{0}HTTP: Image is uploaded successfully!{1}", _uploadStatus.Text, Environment.NewLine)
            _uploadStatus.Text = String.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine)
            _uploadStatus.Text = String.Format("{0}Response content: {1}", _uploadStatus.Text, e.ResponseContent)

        Else  ' if server returned NOT "OK" status
            _uploadStatus.Text = String.Format("{0}Response code: {1}{2}", _uploadStatus.Text, e.ResponseCode, Environment.NewLine)
            _uploadStatus.Text = String.Format("{0}{1}", Environment.NewLine)
            _uploadStatus.Text = String.Format("{0}Response string: {1}", _uploadStatus.Text, e.ResponseString)
        End If


    Else  ' if error occurs
        _uploadStatus.Text = String.Format("{0}Error: {1}", _uploadStatus.Text, e.ErrorString)
    End If

    _uploadStatus.Text = String.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine)

    RaiseEvent Completed(Me, EventArgs.Empty)
End Sub
              
Form _parentForm;
TextBox _uploadStatus;
ProgressBar _progressBar;

HttpUpload _httpUpload = null;

bool _sendingData = false;


/// <summary>
/// Upload acquired image to HTTP server.
/// </summary>
/// <param name="acquiredImage"></param>
public void UploadAcquiredImageAsJpegToHttp(AcquiredImage acquiredImage)
{
    try
    {
        // create HTTP uploader
        _httpUpload = new HttpUpload(_parentForm);

        // subscribe to the events
        _httpUpload.StatusChanged += new EventHandler(_httpUpload_StatusChanged);
        _httpUpload.ProgressChanged += new EventHandler(_httpUpload_ProgressChanged);
        _httpUpload.Completed += new EventHandler(_httpUpload_Completed);

        // set HTTP upload parameters
        _httpUpload.Url = "http://demos.vintasoft.com/WebTwainDemo/ImageUpload.aspx";
        _httpUpload.AddTextField("user", "guest");
        _httpUpload.AddTextField("password", "guest");
        _httpUpload.AddFileField("file", "demo.jpg", acquiredImage.GetAsStream(new TwainJpegEncoderSettings()));

        // post data to the server
        _httpUpload.PostData();
    }
    catch (Exception ex)
    {
        _uploadStatus.Text = string.Format("{0}{1}", _uploadStatus.Text, ex);
    }
    finally
    {
        // set maximal value of the progress bar
        _progressBar.Maximum = _httpUpload.BytesTotal;
    }
}

/// <summary>
/// Status of HTTP uploading is changed.
/// </summary>
private void _httpUpload_StatusChanged(object sender, Vintasoft.Twain.ImageUploading.Http.StatusChangedEventArgs e)
{
    if (_sendingData)
    {
        _uploadStatus.Text = string.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine);
        _sendingData = false;
    }

    // show current upload status in the status string
    _uploadStatus.Text = string.Format("{0}{1}{2}", _uploadStatus.Text, e.StatusString, Environment.NewLine);
}

/// <summary>
/// HTTP uploading is in progress.
/// </summary>
private void _httpUpload_ProgressChanged(object sender, Vintasoft.Twain.ImageUploading.Http.ProgressChangedEventArgs e)
{
    // show the size of uploading data (once per upload)
    if (!_sendingData)
    {
        _uploadStatus.Text = string.Format("{0}({1} bytes){2}", _uploadStatus.Text, e.BytesTotal, Environment.NewLine);
        _sendingData = true;
    }

    // show current upload progress in progress bar
    _progressBar.Value = e.BytesUploaded;

    // show current upload progress, in bytes, in the status string
    _uploadStatus.Text = string.Format("{0}{1} ", _uploadStatus.Text, e.BytesUploaded);
}

/// <summary>
/// HTTP uploading is completed.
/// </summary>
private void _httpUpload_Completed(object sender, Vintasoft.Twain.ImageUploading.Http.CompletedEventArgs e)
{
    _uploadStatus.Text = string.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine);

    // if no errors
    if (e.ErrorCode == 0)
    {
        // if server returned "OK" status
        if (e.ResponseCode == HttpStatusCode.OK)
        {
            _uploadStatus.Text = string.Format("{0}HTTP: Image is uploaded successfully!{1}", _uploadStatus.Text, Environment.NewLine);
            _uploadStatus.Text = string.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine);
            _uploadStatus.Text = string.Format("{0}Response content: {1}", _uploadStatus.Text, e.ResponseContent);
        }
        // if server returned NOT "OK" status
        else
        {
            _uploadStatus.Text = string.Format("{0}Response code: {1}{2}", _uploadStatus.Text, e.ResponseCode, Environment.NewLine);
            _uploadStatus.Text = string.Format("{0}{1}", Environment.NewLine);
            _uploadStatus.Text = string.Format("{0}Response string: {1}", _uploadStatus.Text, e.ResponseString);
        }
    }
    // if error occurs
    else
        _uploadStatus.Text = string.Format("{0}Error: {1}", _uploadStatus.Text, e.ErrorString);

    _uploadStatus.Text = string.Format("{0}{1}", _uploadStatus.Text, Environment.NewLine);
}