I am trying to send a document file from Lotus Script to a web server and save it there. Unfortunately the file transfer does not work. I have a Lotusscript agent to get the document and this part is working ( str_filecontent contains the correct xml file ), but the file transfer or saving is not working. Here is my Lotusscript agent:
Option Public
Option Declare
Sub Initialize
'Declare long
Dim lng_resolveTimeout, lng_connectTimeout, lng_sendTimeout, lng_receiveTimeout As Long
'Declare integer
Dim int_serverCredentials As Integer
'Declare variants
Dim var_submitObject As Variant
'Set values
int_serverCredentials = 0
lng_resolveTimeout = 120000 'miliseconds = 2 minutes
lng_connectTimeout = 1200000
lng_sendTimeout = 1200000
lng_receiveTimeout = 1200000
'Create HTTP object
Set var_submitObject = CreateObject("WinHTTP.WinHTTPRequest.5.1")
Call var_submitObject.SetTimeouts(lng_resolveTimeout, lng_connectTimeout, lng_sendTimeout, lng_receiveTimeout)
'Standards for this post
%REM
Content-Type: multipart/form-data; boundary={boundary}
{boundary}
Content-Disposition: form-data; name="data"; filename="{filename}"
Content-Type: text/plain
{contents}
{boundary}--
%END REM
Dim str_url As String
str_url = "http://.../upload.php"
Dim str_AUTH As String
Dim str_boundary As String
Dim str_filecontent As String
str_filecontent = get_data()
Dim submitHTTP
'Set post parameters
Call var_submitObject.open("POST", str_url, False)
Call var_submitObject.setRequestHeader("Accept", "application/xml")
Call var_submitObject.setRequestHeader("Authorization", "Basic " & str_auth)
Call var_submitObject.setRequestHeader("Content-Type", "multipart/form-data; boundary=b1")
str_boundary = |--b1| & Chr(13) & Chr(10) &_
|Content-Disposition: form-data; name="data"; filename="name.txt"| & Chr(13) & Chr(10) &_
|Content-Type: text/plain| & Chr(13) & Chr(10) &_
str_fileContent & |b1--|
'Send the HTTP request
Call var_submitObject.Send(str_boundary)
'Wait for the answer and set object as returned value for further validation
Call var_submitObject.WaitForResponse
Set submitHTTP = var_submitObject
'Clear memory
Set var_submitObject = Nothing
End Sub
%REM
Function get_data
Description: Comments for Function
%END REM
Function get_data() As String
Dim session As New NotesSession
Dim doc As NotesDocument
' Dim db As NotesDatabase
Dim exporter As NotesDXLExporter
' Set db = session.CurrentDatabase
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
' Set doc = SESSION.CU
Set exporter = session.CreateDXLExporter
get_data = exporter.Export(doc)
Print get_data
End Function
Here is my web server PHP to receive and save the file:
<?php
define("UPLOAD_DIR", "/temp/");
if (!empty($_FILES["data"])) {
$myFile = $_FILES["data"];
if ($myFile["error"] !== UPLOAD_ERR_OK) {
echo "<p>An error occurred.</p>";
exit;
}
// preserve file from temporary directory
$success = move_uploaded_file($myFile["tmp_name"],
UPLOAD_DIR . $name);
if (!$success) {
echo "<p>Unable to save file.</p>";
exit;
}
// set proper permissions on the new file
chmod(UPLOAD_DIR . $name, 0644);
}
?>
Thanks for your time!
Related
My application (written in vb.net) send data to a php script hosted on one of the free webhosting servers. The php script evaluates the data, and responds accordingly. The response from the server looks something like this:
Valid
<!-- Hosting3322 Analytics Code -->
<script type="text/javascript" src="theurlforthewebsite/count.php"></script>
<!-- End of Analytics Code -->
'Valid' is from my php script. Rest of is a little script by the server that they hide in every page.
Here is the php script:
<?php
$d = $_POST['mac'];
if($d=='45bgd0434')
echo "Valid";
else
echo "Invalid";
?>
Here is my vb.net code:
' Create a request using a URL that can receive a post.
Dim request As WebRequest = WebRequest.Create("http://sitename.com/verify.php")
' Set the Method property of the request to POST.
request.Method = "POST"
' Create POST data and convert it to a byte array.
Dim postData As String = "mac=45bgd0434"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
' Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded"
' Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length
' Get the request stream.
Dim dataStream As Stream = request.GetRequestStream()
' Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length)
' Close the Stream object.
dataStream.Close()
' Get the response.
Dim response As WebResponse = request.GetResponse()
' Get the stream containing content returned by the server.
dataStream = response.GetResponseStream()
' Open the stream using a StreamReader for easy access.
Dim reader As New StreamReader(dataStream)
' Read the content.
Dim responseFromServer As String = reader.ReadToEnd()
' Clean up the streams.
reader.Close()
dataStream.Close()
response.Close()
MessageBox.Show(responseFromServer)
I would just like to have only the output and not that extra code. Is there any way I can use an alternative method to print in PHP, or probably another method with which I can talk to the server?
I have tried other free servers on the internet, but they all seem to put in some code. Would really appreciate your help.
I am looking to create a VBS script that can post three parameters as well as upload a file. I have a PHP file sitting on the server which is working perfectly using a form to send the parameters and file, but I want to create a script that means I don't require the form at all and could POST directly from a script.
I am really struggling to find any good / working examples... I wondered if anyone could point me in the right direction?
This is my PHP file
<?php
$parameter1 = $_GET['parameter1'];
$parameter2 = $_GET['parameter2'];
$parameter3 = $_GET['parameter3'];
$tempname = $dataname."--". date("Y_m_d--H_i_s--"). "file.txt";
$filename = '/myfiles/'. $tempname;
if (move_uploaded_file($_FILES['filechoice']['tmp_name'], $filename)) {
echo "uploaded succesfully";
} else {
echo "error uploading";
}
?>
This is the VBScript I have put together via a few sources so far....
Dim strURL
Dim HTTP
Dim dataFile
Dim dataRequest
Dim objStream
strURL = "http://localhost/uploadfile.php?parameter1=mytest1¶meter2=hello¶meter3=thankyou"
Set HTTP = CreateObject("Microsoft.XMLHTTP")
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2
objStream.Open
objStream.LoadFromFile "c:\1234.txt"
dataFile = objStream.ReadText
dataRequest = "filechoice=" & dataFile
HTTP.open "POST", strURL, False
HTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HTTP.setRequestHeader "Content-Length", Len(dataRequest)
WScript.Echo "Now uploading file"
HTTP.send dataRequest
WScript.Echo HTTP.responseText
Set HTTP = Nothing
I have used print_r($_GET) on the PHP file and can see the parameters are being sent perfectly....
But if I try and look for a file i.e print_r($_FILES) - it shows nothing and nothing is uploaded..
I am trying to access the post data sent from VB.net in PHP. But the POST data seems to be empty. I don't know much about vb.net.
vb.net code
Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Net.NetworkInformation
Imports System.Net.Sockets
Imports Microsoft.Win32
Imports System.Security.Cryptography
Imports System.Net.Security
Public Class frmRegistration
Dim xx As Integer
Dim yy As Integer
Private Sub txtPhoneNo_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPhoneNo.KeyPress
Select Case e.KeyChar
Case "0" To "9"
Case vbBack
Case Else
e.KeyChar = ""
End Select
End Sub
Private Function UrlSend(ByRef url As String)
Dim reader As StreamReader
Dim resUri As String
Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
Try
Dim Res As HttpWebResponse = req.GetResponse()
Dim response As HttpWebResponse
response = req.GetResponse
resUri = response.ResponseUri.AbsoluteUri
reader = New StreamReader(response.GetResponseStream())
resUri = reader.ReadToEnd()
Return resUri
Catch ex As Exception
Return ex.Message
End Try
End Function
'Function Send(ByRef url As String, ByVal key As String) As String
' Dim TID = key
' Try
' Dim request As WebRequest = WebRequest.Create(url)
' request.Method = "POST"
' Dim byteArray As Byte() = Encoding.UTF8.GetBytes(TID)
' request.ContentType = "application/x-www-form-urlencoded"
' request.ContentLength = byteArray.Length
' Dim dataStream As Stream = request.GetRequestStream()
' dataStream.Write(byteArray, 0, byteArray.Length)
' dataStream.Close()
' Dim response As WebResponse = request.GetResponse()
' dataStream = response.GetResponseStream()
' Dim reader As New StreamReader(dataStream)
' Dim responseFromServer As String = reader.ReadToEnd()
' reader.Close()
' dataStream.Close()
' response.Close()
' Return responseFromServer
' Catch ex As Exception
' If Ping_Internet("www.google.com") = 1 Then
' MsgBox("Server not responding. Please try later.")
' End If
' Me.Close()
' End
' Return DBNull.Value.ToString
' End Try
'End Function
Public Function Ping_Internet(ByVal Activeurl As String) As Integer
Dim contact As String
Try
contact = My.Settings("TollFree").ToString
Dim strip = System.Net.Dns.GetHostEntry(Activeurl).AddressList(0).ToString
Dim ping As New System.Net.NetworkInformation.Ping
If ping.Send(strip).Status = IPStatus.Success Then
Return 1
Else
MsgBox("You are not connected to the Internet. If you are unable to get connected, contact us for help on our toll-free number(" & contact & ") at any time. ")
End
End If
Catch ex As Exception
MsgBox("You are not connected to the Internet. If you are unable to get connected, contact us for help on our toll-free number(" & contact & ") at any time. ")
End
End Try
Return 0
End Function
Function Domain_Check(ByVal emailid As String) As Boolean
If emailid.Contains("#") Then
Dim Domain As String() = emailid.Split("#")
Dim br As Boolean
Try
Dim ipHost As IPHostEntry = Dns.GetHostEntry(Domain(1))
br = True
Return br
Catch se As SocketException
br = False
Return br
End Try
Else
Return False
End If
End Function
Function IsValidEmailFormat(ByVal s As String) As Boolean
Try
Dim a As New System.Net.Mail.MailAddress(s)
Catch
Return False
End Try
If Domain_Check(s) = True Then
Return True
End If
Return True
End Function
Private Sub pnlOk_Click(sender As System.Object, e As System.EventArgs) Handles pnlOk.Click
If txtName.Text = "" Then
MsgBox("Please Enter Your Name!")
txtName.Focus()
Exit Sub
ElseIf txtPhoneNo.Text = "" Then
MsgBox("Please Enter Your Phone Number!")
txtPhoneNo.Focus()
Exit Sub
ElseIf IsValidEmailFormat(txtEmail.Text.ToString.Trim) = False Then
MsgBox("Please Enter a Valid Email Id!")
txtEmail.Focus()
Exit Sub
ElseIf txtKey.Text = "" Then
MsgBox("Please Enter Product Key Which Was Provided In Your Mail!")
txtKey.Focus()
Exit Sub
End If
Dim url = My.Settings("checkkey").ToString
Dim key = "rqtoken=" & txtEmail.Text.Trim & "|" & txtKey.Text.Trim
Dim resp = UrlSend(url & "?" & key).ToString.Trim
If resp = "OK" Then
Setregistry()
Else
MsgBox(resp)
End If
End Sub
Private Sub Setregistry()
Try
If WinVersion() Then
Registry.LocalMachine.CreateSubKey("SOFTWARE\Microsoft\Windows\Services")
End If
Dim Fullmsg As String = txtName.Text.Trim & "|" & txtPhoneNo.Text.Trim & "|" & txtEmail.Text.Trim & "|" & txtKey.Text.Trim
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Services", "xxxxxxx", AESEncrypt(Fullmsg), Microsoft.Win32.RegistryValueKind.String)
Application.Restart()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Function AESEncrypt(ByVal PlainText As String) As String
Dim InitialVector As String = "CanEncryption123"
If (String.IsNullOrEmpty(PlainText)) Then
Return ""
Exit Function
End If
Dim InitialVectorBytes As Byte() = Encoding.ASCII.GetBytes(InitialVector)
Dim PlainTextBytes As Byte() = Encoding.UTF8.GetBytes(PlainText)
Dim KeyBytes As Byte() = {Convert.ToByte(170), Convert.ToByte(89), Convert.ToByte(62), Convert.ToByte(253), Convert.ToByte(87), Convert.ToByte(232), Convert.ToByte(224), Convert.ToByte(53), Convert.ToByte(148), Convert.ToByte(2), Convert.ToByte(68), Convert.ToByte(185), Convert.ToByte(49), Convert.ToByte(60), Convert.ToByte(133), Convert.ToByte(82), Convert.ToByte(136), Convert.ToByte(27), Convert.ToByte(239), Convert.ToByte(160), Convert.ToByte(91), Convert.ToByte(67), Convert.ToByte(207), Convert.ToByte(233)}
Dim SymmetricKey As RijndaelManaged = New RijndaelManaged()
SymmetricKey.Mode = CipherMode.CBC
Dim CipherTextBytes As Byte() = Nothing
Using Encryptor As ICryptoTransform = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes)
Using MemStream As New MemoryStream()
Using CryptoStream As New CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write)
CryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length)
CryptoStream.FlushFinalBlock()
CipherTextBytes = MemStream.ToArray()
MemStream.Close()
CryptoStream.Close()
End Using
End Using
End Using
SymmetricKey.Clear()
Return Convert.ToBase64String(CipherTextBytes)
End Function
Private Sub pnlCancel_Click(sender As System.Object, e As System.EventArgs) Handles pnlCancel.Click
txtName.Text = ""
txtPhoneNo.Text = ""
txtEmail.Text = ""
txtKey.Text = ""
txtName.Focus()
End Sub
Public Function WinVersion() As Boolean
Dim ver = Environment.OSVersion.Version.Major
If ver > 5 Then
Return True
Else
Return False
End If
End Function
Private Sub pnlOk_MouseEnter(sender As Object, e As System.EventArgs) Handles pnlOk.MouseEnter, pnlOk.MouseLeave
If pnlOk.Tag = 1 Then
pnlOk.BackgroundImage = My.Resources.ok_bttn_hover
pnlOk.Tag = 2
ElseIf pnlOk.Tag = 2 Then
pnlOk.BackgroundImage = My.Resources.ok_bttn
pnlOk.Tag = 1
End If
End Sub
Private Sub pnlCancel_MouseEnter(sender As Object, e As System.EventArgs) Handles pnlCancel.MouseEnter, pnlCancel.MouseLeave
If pnlCancel.Tag = 1 Then
pnlCancel.BackgroundImage = My.Resources.cancel_bttn_hover
pnlCancel.Tag = 2
ElseIf pnlCancel.Tag = 2 Then
pnlCancel.BackgroundImage = My.Resources.cancel_bttn
pnlCancel.Tag = 1
End If
End Sub
Private Sub pcbMin_Click(sender As System.Object, e As System.EventArgs) Handles pcbMin.Click
Me.WindowState = FormWindowState.Minimized
End Sub
Private Sub pcbCross_Click(sender As System.Object, e As System.EventArgs) Handles pcbCross.Click
End
End Sub
Private Sub pnlPan_MouseHover(sender As Object, e As System.EventArgs) Handles pnlPan.MouseHover
xx = Windows.Forms.Cursor.Position.X - Me.Left
yy = Windows.Forms.Cursor.Position.Y - Me.Top
End Sub
Private Sub pnlPan_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles pnlPan.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Me.Left = Windows.Forms.Cursor.Position.X - xx
Me.Top = Windows.Forms.Cursor.Position.Y - yy
Else
xx = Windows.Forms.Cursor.Position.X - Me.Left
yy = Windows.Forms.Cursor.Position.Y - Me.Top
End If
End Sub
Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click
End Sub
End Class
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Reg_Scan.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
<userSettings>
<xxx_xxxx.My.MySettings>
<setting name="TollFree" serializeAs="String">
<value />
</setting>
<setting name="checkkey" serializeAs="String">
<value>http://www.xxxx.com/xxxx.php</value>
</setting>
</xxx_xxxx.My.MySettings>
</userSettings>
Php code
<?php
if($_POST)
{
$email = $_POST["emailid"];
$key = $_POST["key"];
try {
$conn = new PDO('mysql:host=localhost;dbname=xxx_xxx_xx', 'xxxxx', 'xxxxxx');
$stmt = $conn->prepare("SELECT * FROM customer WHERE email=:email");
$stmt->bindValue(':email', $email);
$stmt->execute();
$rows = $stmt->fetch(PDO::FETCH_OBJ);
if ($rows > 0) {
if ( $rows->license_key == $key )
{
echo 'OK'
} else {
echo 'Invalid License Key
Please check your license key or Contact Support Admin
xxx#xxx.com';
}
} else {
echo 'Invalid Email ID
Please check your Email ID or Contact Support Admin
xxx#xxx.com';
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
?>
The php code is working fine as I tested it with an HTML form. Need help in finding why the vb.net form is not sending any post data.
Actually, your commented out 'Send' method will work better than the method you have in there now.
But you need to change the second line - I don't know if the parameter name "tid" is correct, but you can adjust that.
Function Send(ByRef url As String, ByVal key As String) As String
Dim TID = "tid=" & key;
Try
Dim request As WebRequest = WebRequest.Create(url)
request.Method = "POST"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(TID)
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As WebResponse = request.GetResponse()
dataStream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Return responseFromServer
Catch ex As Exception
If Ping_Internet("www.google.com") = 1 Then
MsgBox("Server not responding. Please try later.")
End If
Me.Close()
End
Return DBNull.Value.ToString
End Try
End Function
Well I installed Fiddler and saw that the VB.NET code was generating GET get request as
GET/license_register.php?rqtoken=username#mail.com%7Cpassword
which has the value as
username#mail.com|password
modified my php code to read the GET parameters
$getstring = $_GET["rqtoken"];
list($email, $key) = explode("|", $getstring);
I am trying to post 2 variables to a php script and then return the text that is displayed on the website.
I VB6, I did it the following way, it worked perfectly fine.
Can somebody please tell me how to do this in VB.NET?
Public Function GetHTTPResponse() As String
Dim sPost$
sPost$ = "http://www.somedomain.com/somescript.php"
sPost$ = sPost$ & "?variable1=MYVAR1"
sPost$ = sPost$ & "&variable2=MYVAR2"
'=======================================================
'"?" Prefix 1st Variable, "&" prefix for subsequent vars
'=======================================================
Dim iPos&
iPos = InStr(sPost, "?")
If (iPos = 0) Then
Exit Function
End If
Dim sDomain$
sDomain$ = Left$(sPost, (iPos - 1))
'====================================
'Pack the post data into a byte array
'====================================
Dim sPostData As String
sPostData = Right$(sPost, Len(sPost) - iPos)
Debug.Print sPostData
Dim bytpostdata() As Byte
pBuildPostData bytpostdata(), sPostData
'=============================
'Write the byte into a variant
'=============================
Dim varPostData As Variant
varPostData = bytpostdata
'=================
'Create the Header
'=================
Dim sHeader$
sHeader = "application/x-www-form-urlencoded" + Chr(10) + Chr(13)
'=============
'Post the data
'=============
Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", sDomain, False
xmlhttp.setRequestHeader "Content-Type", sHeader
xmlhttp.sEnd varPostData
Dim sRet$
sRet = xmlhttp.responseText
GetHTTPResponse = sRet
End Function
I finally found the solution here:
http://www.pcreview.co.uk/forums/using-webclient-webrequest-webresponse-post-postdata-and-get-result-t1222629.html
I'm trying to upload an image file to a PHP file on a web server.
On VB.NET ->
My.Computer.Network.UploadFile(tempImageLocation, "website.com/upload.php")
tempImageLocation is a location on the harddrive where the image is located. The image is located on the harddrive where I specify it.
On PHP ->
$image = $_FILES['uploads']['name'];
I don't understand, because it is loading the page - but PHP can't find the file under 'uploads'
Google brought me here while I was searching for the same question. Thanks people it gave me the idea, and with a little knowledge of PHP, I've achieved it. I know its an old question but still I'm going to share my code so it could help people in future..
VB:
My.Computer.Network.UploadFile("e:\file1.jpg", "http://www.mysite.com/upl/upl.php")
PHP:
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
and don't forget to give the upload folder the appropriate permissions.
I know, is old.. but here is solution work to me:
Private Sub HttpUploadFile(
ByVal uri As String,
ByVal filePath As String,
ByVal fileParameterName As String,
ByVal contentType As String)
Dim myFile As New FileInfo(filePath)
Dim sizeInBytes As Long = myFile.Length
Dim boundary As String = "---------------------------" & DateTime.Now.Ticks.ToString("x")
Dim newLine As String = System.Environment.NewLine
Dim boundaryBytes As Byte() = Encoding.ASCII.GetBytes(newLine & "--" & boundary & newLine)
Dim request As Net.HttpWebRequest = Net.WebRequest.Create(uri)
request.ContentType = "multipart/form-data; boundary=" & boundary
request.Method = "POST"
request.KeepAlive = True
'request.Credentials = Net.CredentialCache.DefaultCredentials
Using requestStream As IO.Stream = request.GetRequestStream()
Dim formDataTemplate As String = "Content-Disposition: form-data; name=""{0}""{1}{1}{2}"
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length)
Dim headerTemplate As String = "Content-Disposition: form-data; name=""{0}""; filename=""{1}""{2}Content-Type: {3};"
Dim header As String = String.Format(headerTemplate, fileParameterName, filePath, newLine, contentType)
header = header & vbNewLine & "Content-Length: " & sizeInBytes.ToString & vbNewLine
header = header & "Expect: 100-continue" & vbNewLine & vbNewLine
'MsgBox(header)
Debug.Print(header)
Dim headerBytes As Byte() = Encoding.UTF8.GetBytes(header)
requestStream.Write(headerBytes, 0, header.Length)
Using fileStream As New IO.FileStream(filePath, IO.FileMode.Open, IO.FileAccess.Read)
Dim buffer(4096) As Byte
Dim bytesRead As Int32 = fileStream.Read(buffer, 0, buffer.Length)
Do While (bytesRead > 0)
requestStream.Write(buffer, 0, bytesRead)
bytesRead = fileStream.Read(buffer, 0, buffer.Length)
Loop
End Using
Dim trailer As Byte() = Encoding.ASCII.GetBytes(newLine & "--" + boundary + "--" & newLine)
requestStream.Write(trailer, 0, trailer.Length)
requestStream.Close()
End Using
Dim response As Net.WebResponse = Nothing
Try
response = request.GetResponse()
Using responseStream As IO.Stream = response.GetResponseStream()
Using responseReader As New IO.StreamReader(responseStream)
Dim responseText = responseReader.ReadToEnd()
Debug.Print(responseText)
End Using
End Using
Catch exception As Net.WebException
response = exception.Response
If (response IsNot Nothing) Then
Using reader As New IO.StreamReader(response.GetResponseStream())
Dim responseText = reader.ReadToEnd()
Diagnostics.Debug.Write(responseText)
End Using
response.Close()
End If
Finally
request = Nothing
End Try
End Sub
Using:
HttpUploadFile("https://www.yousite.com/ws/upload.php?option1=sss&options2=12121", FULL_FILE_NAME_PATH_IN_YOUR_PC, "files", "multipart/form-data")
I copy somen code in a website i dont remember.
I only put this 2 lines of code to work:
header = header & vbNewLine & "Content-Length: " & sizeInBytes.ToString & vbNewLine
header = header & vbNewLine & "Expect: 100-continue" & vbNewLine
hope help.
Here is the complete example for uploading file using Visual Basic and on Server Side PHP (Rest API) GitHub Link
Here is quick and dirty tutorial for you: PHP File Upload
'uploads' is just name attribute value of element of a form:
<input type="file" name="uploads" />
or in other words, this is POST variable name that is accessed over $_FILES global.
If you don't set the field name, you can save the uploaded file with this
$file = array_shift($_FILES);
move_uploaded_file($file['tmp_name'], '/path/to/new/location/'.$file['name']);
Take a look at some of these other answers. PHP requires files uploaded with the POST method to use certain headers which are normally set by the browser when uploading from a web form but which can be set in VB with the HttpWebRequest Class.
As for the PHP side, you aren't going to be able to locate the file immediately after uploading with $image = $_FILES['uploads']['name'];. PHP stores uploads with a temporary filename accessible with the $_FILES['uploads']['tmp_name'] variable, and using move_uploaded_file() is the standard way of shifting uploads from temporary storage into a permanent uploads directory. The PHP manual provides a good overview of that.
Here's my sample server php file:
<?php
// write to a log file so you know it's working
$msg = $_POST['w'];
$logfile= 'data.txt';
$fp = fopen($logfile, "a");
fwrite($fp, $msg);
fclose($fp);
$file = array_shift($_FILES);
move_uploaded_file($file['tmp_name'], '/MAMP/htdocs/test/'.$file['name']);
?>
Here's the code to call #Rodrigo's code:
HttpUploadFile("http://localhost/test/test.php?w=hello&options2=12121", "C:\temp\bahamas.mp3", "files", "multipart/form-data")