I need a way to upload a file and POST it into php page
the php is on apache server
and i use this c code in my desktop application:
It's a socket by c code
When I execute the Program , can get
The file size is 772906
open server ok
The file size is 772906
Connect to server ok
Open file ok
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 102400 bytes, Sending 102400 bytes
fread 56106 bytes, Sending 56106 bytes
Sending file Finished!
result: Return Code:
Upload:
Type:
Size: 0 Kb
Temp file:
Stored in:
But file is not exist .
I guess maybe it's possible HTTP protocol ,But I don't know how to do.
would you tell me details ?
Thanks a lot.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <arpa/inet.h>
int main(){
int sockfd, numbytes;
FILE *fp;
char buf[300];
char filename[10]="1.jpg";
char send1[100];
struct sockaddr_in address;
struct stat filestat;
int retval;
char *str="GET /some address/upload_file.php?";
//Get file stat
if ( lstat(filename, &filestat) < 0){
exit(1);
}
printf("The file size is %lu\n", filestat.st_size);
//TCP socket
if ( ( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) == -1 ){
perror("socket");
exit(1);
}else{
printf("open server ok\n");
}
#if 1
//Initial, connect to port 80
address.sin_family = AF_INET;
address.sin_port = htons(80);
address.sin_addr.s_addr = inet_addr("xx.xx.xx.xx");
bzero( &(address.sin_zero), 8 );
#endif
//Get file stat
if ( lstat("1.jpg", &filestat) < 0){
exit(1);
}
printf("The file size is %lu\n", filestat.st_size);
fp = fopen("1.jpg", "rb");
//Connect to server
if ( connect(sockfd, (struct sockaddr*)&address, sizeof(struct sockaddr)) == -1){
perror("connect");
exit(1);
}else{
printf("Connect to server ok\n");
}
if ( (fp = fopen(filename,"rb")) == NULL){
perror("fopen");
exit(1);
}else{
printf("Open file ok\n");
}
sprintf(send1,"%s\n",str);
retval= send(sockfd,send1,sizeof(send1),0);
//Sending file
while(!feof(fp)){
numbytes = fread(buf, sizeof(char), sizeof(buf), fp);
//printf("fread %d bytes, ", numbytes);
numbytes = write(sockfd, buf, numbytes);
//printf("Sending %d bytes\n",numbytes);
}
printf("Sending file Finished!\n");
//Receive from server
if ( (numbytes = recv(sockfd, buf, sizeof(buf)+1,0) ) == -1 ){
perror("recv");
exit(1);
}
printf("result: %s\n\n\n", buf);
fclose(fp);
close(sockfd);
return 0;
}
my php is :
<?php
if (1){
if ($_FILES["file"]["error"] > 0){
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}else{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
//move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], "5446");
echo "Stored in: " . $_FILES["file"]["name"];
}
}else{
echo "Invalid file";
}
?>