2016-07-28 71 views
0

我有一個表單,其中內容兩個輸入一個隱藏的名稱=「動作」,第二個名稱=「頭像」類型=「文件」。 用戶在頭像輸入中選擇文件後,圖像將轉換爲blob。 我該如何發佈blob,因爲它是作爲一個文件加載和submited後?如何將blob作爲使用javascript的文件進行POST?

形式:

<form enctype="multipart/form-data" method="post" id="avatarform"> 
    <input type="hidden" name="action" value="save" /> 
    <input id="coolButton" name="avatar" type="file" accept="image/*" class="form-control" placeholder=""> 
</form> 

我有嘗試:

var fd = new FormData(); 
fd.append('action', 'save'); 
fd.append('avatar', file.name); 
fd.append('data', blob); 

$.ajax({ 
    type: 'POST', 
    url: '/', 
    data: fd, 
    processData: false, 
    contentType: false 
}).done(function(data) { 
     console.log(data); 
}); 

PHP控制器:

if ($_FILES['avatar']['name']) { 
     if ($profile->avatar==1) { 
      unlink('/images/avatars/'.$profile->avatar); 
      $profile->avatar=0; 
     } 
     $filename="avatar_".$user_id.'.'.pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION); 
     move_uploaded_file($_FILES['avatar']['tmp_name'],$_SERVER['DOCUMENT_ROOT'] ."/images/avatars/".$filename); 
     $profile->avatar=$filename; 
    } 

但是PHP控制器不保存它。如果我使用沒有腳本的表單,將圖像轉換爲blob - 它工作良好並保存文件。

+0

請提供加載文件的一些代碼 – henrybbosa

+0

file.name =名稱; blob = data:image/png; base64,.............. [binarycode]; 只有這部分代碼使POST操作,其他代碼更新blob。 我只是想獲得更新圖像提交表單的方法。 – Mike

回答

0

我已經更新腳本

fd.append('blob', blob.replace("data:image/png;base64,", "") 
fd.append('ext', "jpg") // send ext of uploaded file 

和PHP控制器

if ($_POST['blob']) { 
     if ($profile->avatar==1) { 
      unlink('/images/avatars/'.$profile->avatar); 
      $profile->avatar=0; 
     } 
     $file = base64_decode($_POST['blob']); 
     $filename="avatar_".$user_id.'.'.$_POST['ext']; 
     file_put_contents($_SERVER['DOCUMENT_ROOT'] ."/images/avatars/".$filename, $file); 
     $profile->avatar=$filename; 
    } 
+0

嗨邁克,我可以讓你做一個完整的代碼的例子嗎?不能讓它工作,我不知道什麼是錯的 – TheCrazyProfessor

相關問題