cでcgiファイルを作成しました。ユーザーがアップロードしたいファイルを選択できるhtmlファイルがあります。
問題は、ファイルを選択すると、ファイルの値がディレクトリではなくファイルの名前になるため、ファイルを読み取れないことです。
ファイルにアクセスするにはどうすればよいですか?
<form action="./cgi-bin/paperload.cgi" method="get">
<pre>Title: <input type="text" name="title"><br></pre>
<pre>Author: <input type="text" name="author"><br></pre>
<pre>File: <input type="file" name="file"><br></pre>
<pre><input type="submit" value="Upload paper"></pre>
</form>
c - cgi コード
void getParam(const char *Name, char Value[256]) {
char *pos1 = strstr(data, Name);
if (pos1) {
pos1 += strlen(Name);
if (*pos1 == '=') { // Make sure there is an '=' where we expect it
pos1++;
while (*pos1 && *pos1 != '&') {
if (*pos1 == '%') { // Convert it to a single ASCII character and store at our Valueination
*Value++ = (char)ToHex(pos1[1]) * 16 + ToHex(pos1[2]);
pos1 += 3;
} else if( *pos1=='+' ) { // If it's a '+', store a space at our Valueination
*Value++ = ' ';
pos1++;
} else {
*Value++ = *pos1++; // Otherwise, just store the character at our Valueination
}
}
*Value++ = '\0';
return;
}
}
strcpy(Value, "undefine"); // If param not found, then use default parameter
return;
}
メインコード
// check for a correct id
data = getenv("QUERY_STRING");
getParam("title",paper->author_name);
getParam("author",paper->paper_title);
getParam("file",paper->paper_file_name);
paper_file = fopen(paper->paper_file_name, "r+");
if (paper_file) {
// we continue to read until we reach end of file
while(!feof(paper_file)){
fread(paper->paper_content,BUFSIZ, 1, paper_file);
}
//close the file
fclose(paper_file);
}
else {
fprintf(stderr, "Unable to open file %s", paper->paper_file_name);
exit(-1);
}
POST メソッドを使用しても問題は解決しません。問題は、html からの入力を解析する方法ではありません。問題は、メイン コードを読み込もうとするときです。
html のタイプをファイルからテキストに変更し、ファイルのパスを手動で指定しようとすると、構文はどのようになりますか?