0

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 のタイプをファイルからテキストに変更し、ファイルのパスを手動で指定しようとすると、構文はどのようになりますか?

4

1 に答える 1

1

ディレクトリ情報は必要ありません。ファイルの内容は POST リクエストに添付されているので、そこから取得する必要があります。プロセスを処理する CGI ライブラリとしてcgicqdecoderを使用することをお勧めします。または、少なくともリクエスト ヘッダーをどのように解析しているかを理解し、自分のアプリケーションに同じロジックを適用することができます。

Qdecoder アップロード ファイルの例: http://www.qdecoder.org/releases/current/examples/uploadfile.c

于 2012-10-29T13:33:41.367 に答える