Skip to content

file upload

Jason Guan-Shuo Mai edited this page Nov 30, 2018 · 4 revisions

檔案上傳 WF 5.3

必要資訊:

  • fullCameraLocationMd5 檔案上傳時,會需要替每個待上傳的檔案設定 site、subSite、cameraLocation等資訊,加上 projectId,即可產生 fullCameraLocationMd5 md5(projectId/site/subSite/cameraLocation),計畫設定上若不需要填寫 subSite,補上字串的 'NULL'
  • upload session id 替每個檔案產生一個 uuid v4 的 upload session id ($sessid)

產生 upload session id,安排上傳路徑

於前端產生 upload session id (uuid v4) 值,以下簡稱 sessid,並依檔案類型上傳至以下位置 (暫時稱為 $PATH_PREFIX): ZIP:upload/$sessid/zip/ CSV:upload/$sessid/csv/ JPG:upload/$sessid/image/ MP4/AVI:upload/$sessid/video/

更新上傳事件狀態資訊

只在以下幾個情境需要更新上傳事件狀態:

  1. 開始上傳時將狀態設為 WAITING
  2. 成功時更新為 SUCCESS
  3. 失敗 FAILED
  4. 取消 CANCELLED
  • endpoint /upload-session/bulk-update
  • post data
[
  {
    _id: $sessid,
    projectId: projectId,
    $set: {
      status: SUCCESS|FAILED|WAITING|CANCELLED
    },
    $setOnInsert: {
      upload_session_id: $sessid,
      fullCameraLocationMd5: $fullCameraLocationMd5,
      projectId: $projectId,
      projectTitle: $projectTitle,
      site: $site,
      subSite: $subSite,
      cameraLocation: $cameraLocation
      by: $user_id,
      file: $PATH_PREFIX + file.name
    },
    $upsert: true
  }
]
  • response default db response

設定上傳參數與 tags

於前端上傳檔案至 AWS S3 時,加入 projectId, projectTitle, site, subSite, cameraLocation, userId 等 tags;如果 subSite 是空值,請填入字串的 'NULL'

let bucket = 'camera-trap';
let key = $PATH_PREFIX + file.name;
// 替每個上傳檔設定 uploader
let uploader = new AWS.S3.ManagedUpload({
  params: {Bucket: bucket, Key: key, Body: file},
  tags: [
    {Key: "projectId", Value: $projectId},
    {Key: "projectTitle", Value: $projectTitle},
    {Key: "site", Value: $site},
    {Key: "subSite", Value: $subSite},
    {Key: "cameraLocation", Value: $cameraLocation},
    {Key: "user_id", Value: $user_id}
  ]
});

進行上傳 WF 5.6


let seErrHandler = function (err, data) {
  ...
}

uploader.send(s3ErrHandler);

顯示上傳進度 WF 5.6, WF 5.7

uploader.on('httpUploadProgress', function(progress) {
  console.log((100 * progress.loaded / progress.total) + '%');
  // console.log(progress);
});

檢視與特定上傳事件相關的資料 WF 5.6, WF 5.7

query:查詢條件 projection:回傳欄位 (default 是回傳完整文件)

  • endpoint /media/annotation/query
  • post data
{
  "query": {
    "related_upload_sessions": $sessid
  }
}
  • response {"ret": [ $multimedia_annotation, ... ]}

上傳紀錄 WF 6.1

顯示與登入使用者相關的上傳操作紀錄

  • endpoint GET /upload-session/mine
  • response
{
  "ret": [
    {
      "_id": "test_upload_session_02",
      "upload_session_id": "test_upload_session_02",
      "projectId": $projectId,
      "projectTitle": "測試計畫1",
      "fullCameraLocationMd5": "263d239eb09fa3b607f4846e67b91ba3",
      "status": "ERROR",
      "by": "OrcID_0000-0002-7446-3249",
      "modified": 1542009001.994,
      "messages": [ // 詳細錯誤訊息
        {
          "key": "upload/test_upload_session_02/csv/TD06B.csv",
          "errors": [
            "上傳資料與過往資料重疊,暫不匯入."
          ],
          "modified": 1541750623.705,
          "problematic_ids": [潛在有問題的資料ID, ...],
        },
        {
          "key": "upload/test_upload_session_02/csv/TD03A.csv",
          "errors": [
            "上傳資料與過往資料重疊,暫不匯入."
          ],
          "modified": 1541750915.423,
          "problematic_ids": [潛在有問題的資料ID, ...],
        },
        ...
      ],
      "file": "上傳的那個檔案",
      "created": 1540788756.494,
      "modified": 1542014471.609,
    }
  ]
}