2016-12-19 42 views
0

我的網站有一個功能,允許用戶創建帖子(如Facebook)。我有一個帶有「消息」輸入字段和允許用戶上傳圖片的按鈕的表單。圖片上傳後提交數據

現在,我如何設置代碼是,當用戶提交表單時,我的代碼將首先提交數據,然後上載圖像。

問題是,如果用戶在中途取消圖片上傳時,數據庫記錄將存在(因爲數據是在圖片上傳之前提交的),但不會上傳圖片。

所以我的解決方案是先上傳圖片並提交數據。這個問題是我不知道如何將圖像綁定到數據庫記錄中的數據。

應上傳所有的圖像來/tmp,然後將文件移動到永久目錄,如/var/www/html/website/public/img/uploads/<upload_id>其中upload_id是數據庫記錄的id

如果用戶上傳圖片,但是中途關閉了標籤,該怎麼辦?那麼在/tmp中將會有一張圖像,除非目錄被清理,否則它將永遠留在那裏。我將如何清理它?

這是做這件事的最好方法還是有更好的方法?

我正在使用Laravel 5.3和Dropzone.js

謝謝。

回答

0

由於您使用Dropzone.js允許文件通過AJAX上傳,你可以做到這一點通過以下方式:

1)將文件發送到使用Dropzone.js(AJAX)的後端服務器。

2)由於您使用laravel,每個文件時,收到將是UploadedFile一個實例,你可以使用這個類來訪問上傳的文件,大小,Mime類型等

3)在原來的名字數據庫中的圖像模型(如果尚未完成,請創建此圖像模型),爲此圖像創建一個新記錄,並根據需要存儲上述字段以及要存儲圖像的路徑。您可以使用存儲在表格行中的此路徑稍後訪問圖像。

4)獲取圖像表中新插入行的'id',並將其傳回到前端,您可以使用'success'事件處理程序爲Dropzone插件接收它。

5)將這個新插入的'id'追加爲表單中隱藏的輸入元素。

6)當您提交表單時,您將收到與您的文章相關的圖像ID,您可以使用您選擇的數據庫關係保存它。

7)是的,您需要額外檢查已經上傳並輸入到圖像表中的圖像,但是尚未創建帖子的圖像。您可以爲此創建一個Artisan CLI命令,並將其分配爲Cron Job

0

我想你應該用AJAX提交你的表單。這個解決方案對我很有用。

  1. 做一個,跨度或其他元素與事件「點擊」,而不是按鈕,因爲按鈕按下自動確認形式,即使按鈕的類型不是「提交」。

  2. 寫一個AJAX功能是這樣的:

    function newsFormSubmit(item_id){ 
    
         var formData = new FormData($('.news-form')[0]); 
    
         formData.append("item_id", item_id); 
    
         $.ajax({ 
         type: 'POST', 
         url: config.routes[0].savenews, 
         data: formData, 
         processData: false, 
         contentType: false, 
         success: function (data) { 
          if (data.error) 
          { 
           alert(data.error); 
           return false; 
          } else if (data) 
          { 
           $('#news-card-' + item_id).html(data); 
          } 
         } 
        }); 
    } 
    
  3. 放在onclick事件此功能。

+0

請重新閱讀我的問題。我不是在尋找這種解決方案。 – user7315267

+0

好的,如果你不想改變解決方案,你應該做預覽圖像而不保存。我認爲,這篇文章會有所幫助 - http://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded。使用預覽如果用戶關閉表單,圖像將不會存儲到數據庫和磁盤空間。如果用戶將確認表格數據 - 您應該上傳圖片並以我在下面寫的方式確認表格。 –