我使用的ulfius 1.0.4框架下Ulfius:文件上傳創建碎文件
通過HTML表單上傳文件,如果我上傳一個簡單的文本文件的幾個能力編寫的應用程序一行文字一切正常。 但是,如果我上傳更復雜的圖片,如JPG格式,應用程序創建的文件不像用戶上傳的原始文件。創建的圖片無法顯示。 我用十六進制編輯器打開了創建的文件。前4個字節是相同的。但在此之後,我會看到看起來像HTTP標頭的部分。
這是我的回調函數:
int callback_upload_file(const struct _u_request * request, struct _u_response * response, void * user_data) {
int i;
const char **keys, *fileName, *fileContent;
size_t len;
keys = u_map_enum_keys(request->map_post_body);
for (i = 0; keys[i] != NULL; i++) {
if (strcmp(keys[i], "dateiname") == 0) {
fileName = u_map_get(request->map_post_body, keys[i]);
}
if (strcmp(keys[i], "datei") == 0) {
fileContent = u_map_get(request->map_post_body, keys[i]);
len = u_map_get_length(request->map_post_body, keys[i]);
}
}
FILE *fp;
fp = fopen(fileName, "w");
fwrite(fileContent, sizeof (char), len - sizeof (char), fp);
fclose(fp);
response->string_body = msprintf("File uploaded!");
response->status = 200;
return U_OK;
}
這是我的HTML表單:
<form method="post" action="/upload" enctype="multipart/form-data">
\t <input id="upload" name="datei" type="file">
\t <p>Dateiname <input id="filename" name="dateiname" type="text"></p>
\t <input type="submit" name="hochladen" value="hochladen">
</form>
非常感謝!
這將是由非法內存訪問導致的未定義行爲。如果可能,請使用內存調試程序,並且應該快速修復它。另外,你是否知道'sizeof(char)'總是1?你爲什麼要從長度上減去'sizeof(char)'呢? –