2015-05-13 24 views
0

對於某些文件名編碼問題(西班牙用戶)和其他一些問題,我們需要手動構建上傳文件的文件名。訪問實際文件名

當Fine Uploader將信息傳遞給服務器時,代碼更改目標文件名(在下面的用例中爲「my_name.jpg」)。 handler.php文件將具有該名稱的文件保存到文件系統,然後在uploadName參數中返回該新文件名。這一切都正常工作。

當我通過uploadName參數將該信息返回到Fine Uploader時,我期望能夠在JavaScript中訪問該新文件名,以便我可以進行調用以將文件名存儲到數據庫。

相關的代碼是下面:

設置:

var settings = { 
    debug: true, 
    request: { 
     endpoint: 'ajax/endpoint.php', 
    }, 
    deleteFile: { 
     enabled: true, 
     endpoint: 'ajax/endpoint.php' 
    }, 
    retry: { 
     enableAuto: true 
    }, 
    callbacks: { 
     onComplete: function(id, name, response) { 
      this.setName(id, response.uploadName); 
     } 
    }, 
    autoUpload: true, 
    editFilename: false, 
    retry: { 
     enableAuto: true 
    }, 
    resume: { 
     enabled: true 
    }, 
    chunking: { 
     enabled: false 
    }, 
    session: { 
     endpoint: 'ajax/initialfiles.php' 
    }, 
    validation: { 
     allowedExtensions: ['jpg', 'gif', 'png'], 
     itemLimit: 3, 
     sizeLimit: 5000000 
    } 
}; 

代碼:

$uploaderDiv = $('#fine-uploader'); 

uploaderObj = $uploaderDiv.fineUploader(settings).on("statusChange", function (event, id, oldStatus, newStatus) { 
    if (newStatus == 'upload successful' || newStatus == 'deleted') { 
     var files = uploaderObj.fineUploader('getUploads'); 
     $.each(files, function (i, file) { 
      if (file.status == 'upload successful') { 
       console.log(file); 
      } 
     }); 
    } 
}); 

當上傳文件時,來自服務器的響應是:

{"success":true,"uuid":"f542c893-920a-4f58-a57f-7bd5d0f45294","uploadName":"my_name-715.jpg"} 

但是,con唯一的日誌文件的信息生成:

{ 
batchId: "98b6a0c0-28ed-466f-8d69-9cea425c20a9" 
id: 0 
name: "Karen_Book (thumb).jpg", 
originalName: "Karen_Book (thumb).jpg", 
proxyGroupId: "acf40500-9c8b-4c6e-a4f6-2542443d458d", 
size: 5977 
status: "upload successful", 
uuid: "f542c893-920a-4f58-a57f-7bd5d0f45294" 
} 

鑑於上述情況,我怎樣才能在statusChange事件的文件名「MY_NAME-715.jpg」?

+0

我不明白這個問題,或者你正在努力完成什麼。你想改變文件的名字嗎?在你的回覆中只需返回一個'uploadName'就不會實現這個功能。 –

+0

@RayNicholus - 當文件名從ajax調用回來時,我需要訪問保存的實際文件名,以便我可以將該信息存儲在數據庫中。我會擴大這個問題。 –

+0

@cale_b嘗試將文件保存爲JSON對象內的base64字符串。用戶可以輸入文件名,或者文件名可以設置爲'js';在整個過程中保留相同的文件名。 – guest271314

回答

1

如果您想訪問服務器的任何響應,則必須在an onComplete event handler之內執行此操作。響應JSON作爲傳遞給您的處理程序的參數包含在內。這聽起來像你想用更新後的名稱(從你的服務器?)向你的服務器發出請求?在同一個處理程序中,您應該發送任何所需的請求。 onComplete在上傳請求完成時觸發,onDeleteComplete在刪除請求完成時觸發。

+0

嗨雷 - 謝謝。如果你看看我的代碼示例,我有一個oncomplete處理程序。你是說我需要用這些數據來維護一個單獨的變量嗎?使用(例如)uuid作爲我的數據和getUploads調用中可用的數據之間的鍵/連接? –

+0

你是說''setName'函數實際上並沒有改變文件名嗎?我沒有看到任何這樣的問題。如果這不是問題,那麼_why_是否要在statusChange處理程序中訪問此新文件名?在調用onComplete之前,狀態很可能會變爲成功。 –

+0

Ray - 在文件成功上傳後,我需要將文件名保存到數據庫。你會怎麼建議我去做這件事? setName是設置前端顯示的名稱,但不會在其他地方提供該名稱(我可以看到)? –