閱讀PHP文件上傳
感謝。
PHP代碼使用$_FILES
,其期待客戶端在MIME發佈一個HTML網頁表單multipart/form-data
格式:
Handling file uploads>POST method uploads
PHP能夠從任何RFC-接收文件上傳的1867兼容瀏覽器。
RFC 1867 Form-based File Upload in HTML
但該格式是不是您的應用程序實際上是張貼,雖然。它只是簡單地發佈原始文件內容,沒有MIME元數據來描述文件。這就是爲什麼你的PHP代碼不工作。
要發佈使用TIdHTTP.Post()
一個multipart/form-data
HTML網頁表單,您必須使用TIdMultipartFormDataStream
類,如:
uses
..., IdHTTP, IdMultipartFormDataStream;
procedure TForm1.Button1Click(Sender: TObject);
var
PostData: TIdMultipartFormDataStream;
begin
PostData := TIdMultipartFormDataStream.Create;
try
PostData.AddFile('file', 'C:\Users\Someone\Desktop\log.txt');
idhttp1.Post('http://127.0.0.1/GET2.php', PostData)
finally
PostData.Free;
end;
end;
另外,PHP還支持HTTP文件上傳PUT
請求:
Handling file uploads>PUT method support
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
begin
FS := TFileStream.Create('C:\Users\Someone\Desktop\log.txt', fmOpenRead or fmShareDenyWrite);
try
idhttp1.Put('http://127.0.0.1/log.txt', FS);
finally
FS.Free;
end;
end;
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("log.txt", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>
這就是回答我的問題,解決。 – Someone
如果是這樣,請將答案標記爲已接受。 –
@David Heffernan:我當時沒有特權接受答案!先生,你過得不好嗎?你投下了我曾經發布在stackoverflow上的所有東西,並給了我政治風格的執行力。 – Someone