I need a way to upload a file and send it to a php page
php is on apache server
and I use this c code in my desktop application:
This is a socket with code c
When I run the program, I can get
File size: 772906 open the server in order File size 772906 connect to the server in order Open file ok fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes , Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 102400 bytes, Send 102400 bytes fread 56106 bytes, send 56106 bytes Send the file Done! Result: Return code:
Download:
Type:
Size: 0 Kb
Temp file:
Saved in:
But the file does not exist.
I think maybe this is an HTTP protocol, but I don't know how to do it.
Tell me the details?
Many thanks.
#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?";
if ( lstat(filename, &filestat) < 0){
exit(1);
}
printf("The file size is %lu\n", filestat.st_size);
if ( ( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) == -1 ){
perror("socket");
exit(1);
}else{
printf("open server ok\n");
}
#if 1
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
if ( lstat("1.jpg", &filestat) < 0){
exit(1);
}
printf("The file size is %lu\n", filestat.st_size);
fp = fopen("1.jpg", "rb");
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);
while(!feof(fp)){
numbytes = fread(buf, sizeof(char), sizeof(buf), fp);
numbytes = write(sockfd, buf, numbytes);
}
printf("Sending file Finished!\n");
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:
<?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";
}
?>