2016-05-23 115 views
1

我計劃開發一個圖像上傳API,它需要將圖像上傳到服務器位置作爲我的項目的一部分。 (用法是使用Android應用程序上傳用戶圖片和頭像)使用博客將圖像上傳到服務器PHP

API應與Imgur API類似,我們可以在其中使用發佈請求將二進制圖像上傳到服務器。

我通過多個問題搜索,所有得到的是使用多部分請求,這需要html表單提交。由於我的目標是創建一個API,HTML表單提交將是不可能的。

無論如何,我提交了一個使用html表單上傳圖片的示例代碼。有人可以展示我如何修改腳本以符合我的要求?

<html> 
      <body> 

<form action="photo.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 
       </body> 
       </html> 

PHP代碼

<?php 
$allow = array("jpg", "jpeg", "gif", "png"); 

$todir = 'uploads/'; 

if (!!$_FILES['file']['tmp_name']) // is the file uploaded yet? 
{ 
    $info = explode('.', strtolower($_FILES['file']['name'])); // whats the extension of the file 

    if (in_array(end($info), $allow)) // is this file allowed 
    { 
     if (move_uploaded_file($_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name']))) 
     { 
      // the file has been moved correctly 
     } 
    } 
    else 
    { 
     // error this file ext is not allowed 
    } 
} 
?> 
+0

它有效的語法'!! $ _ FILES ['file'] ['tmp_name']'??雙'!!' – Saty

+0

哎呀。糾正它。感謝您的信息。 –

+0

等待'!!'我認爲實際上更有意義,現在你似乎只在沒有文件上傳時才運行驗證碼。雙重exclam'!!'只是簡單地將一個值轉換爲布爾值,因爲它僅僅意味着虛假行爲。因此,它將採用一個變量並評估它的布爾值,然後應用邏輯「NOT」,再次執行該操作只會將一個變量轉換爲布爾值,但由於它處於if條件,因此無論如何,所以我不在這裏看點。但是,編輯後,它實際上看起來是錯誤的。 – apriede

回答

0

需要HTML表單提交

這是不對的多部分請求。它需要格式正確的請求(標​​題和正文),句點。事實上,服務器無法知道用什麼軟件來生成請求 - 或者如果您只是在控制檯中鍵入字節;-)

+0

這很有趣。不過,我只想表達一下,我不能在我的情況下使用HTML表單提交。 –

+0

我的回答是想表達你不需要。我很確定Android SDK提供了適當的庫來生成'multipart/form-data'消息,而無需使用瀏覽器作爲代理。無論如何,如果你的問題實際上與此無關,我建議你編輯它,我會很高興刪除我的答案。 –

1

關於您的服務器端代碼的一些評論順序:

  • 正如你可以在閱讀Handling file uploads,正確的方法來驗證上傳比較['error']子項與UPLOAD_ERR_OKcodes explained here)。不要使用['tmp_name']

  • 不要讓最終用戶選擇服務器上的實際文件名。你最好自己生成一個唯一的名稱,並保持顯示名稱在其他地方(如數據庫)

  • 推薦的方法來確定文件擴展名是pathinfo:由用戶提供

    pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION) 
    
  • 文件擴展名不是確定文件類型的可靠方法。對於圖片,經常使用getimagesize功能。