搭建PHP提交文件服务:
upload.php
<?php
if ($_FILES["file"]["name"] != "")
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
if (file_exists("data/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "data/" . $_FILES["file"]["name"]);
echo "upload " . $_FILES["file"]["name"] . " succ! " . "@[". date('Y-m-d H:i') . "]";
}
}
}
else
{
echo "file error";
}
?>
方法一:HTML方式提交:
upload.html
<HTML>
<HEAD><TITLE>PHP-文件上传</TITLE>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
</HEAD>
<BODY>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" class="btn btn-primary btn-large" value="上传文件" />
</form>
</BODY>
</HTML>
方法二:使用curl提交:
CURL命令行方式:
curl -F "action=upload.php" -F "method=post" -F "file=@qq.html" http://localhost/nsplatform/php_svr/upload.php
效果分别如下:
方法三:使用VS C++实现上传功能(windows)
环境:vs2008 + curl库 (http://curl.haxx.se/download/curl-7.26.0.zip)
步骤:
安装VS2008 ....略
下载解压curl-7.26.0 进入lib 打开dsp或dsw文件,默认转换
编译运行会再 lib下生成如 lib/Debug/libcurl.lib [这就是我们要依赖的库]
新建一个项目如my_libcurl_test编写代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#define POSTFIELDS "?action=upload&method=post"
#define LOGNAME "upload.log"
//回调用于写日志
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
int main(int argc, char *argv[]) {
if (argc != 3)
{
printf("Usage: %s fileToUpload uploaderUrl\n", argv[0]);
printf("Eg : %s a.tgz http://localhost/nsplatform/php_svr/upload.php\n", argv[0]);
exit(0);
}
CURL *curl;
CURLcode res;
FILE *fptr;
struct curl_slist *http_header = NULL;
int nErr = 0;
if (( nErr = fopen_s(&fptr, LOGNAME, "at")) != 0) {
fprintf(stderr, "fopen file error: %s\n", LOGNAME);
exit(1);
}
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
struct curl_httppost *formpost = 0;
struct curl_httppost *lastptr = 0;
curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "reqformat", CURLFORM_PTRCONTENTS, "plain", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_FILE, argv[1], CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_URL, argv[2]);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
FILE *fptr = (FILE*)userp;
fwrite(buffer, size, nmemb, fptr);
return 0;
}
5.配置如下
c/c++->General->Addition Include Diretories: D:\\...........\\curl-7.26.0\include
c/c++->Preprocessor->Preprocessor Definitions: WIN32;_DEBUG;CONSOLE;CURL_STATICLIB
Linker->Input->Additional Dependencies: libcurl.lib Ws2_32.lib wldap32.lib
6.构建成功后运行命令:
my_libcurl_test.exe my_libcurl_test.exp http://localhost/nsplatform/php_svr/upload.php
upload.log日志:
upload my_libcurl_test.exe succ! @[2014-06-02 08:20]