uploady v0.6.6
uploady
Utilities for the file upload process (primarily photos) as it relates to Prospector and the WHCC system.
Install
npm install --save uploady prospector-js-sdk superagentUsage
Table of Contents
- Uploady
- UploadyConfig
- UploadPhotosConfig
- UploadPhotoConfigObject
- EVENTS
- HOME
- ALLOWED_MIME_TYPES
- getPhotoInfo
- UploadyPhotoInfo
- isExifRotated90
- PhotoUploadMetadata
- UploadyFileSuccessListener
- UploadyFileErrorListener
- UploadyFileInvalidListener
- UploadyFileExifListener
- UploadyProgressListener
- UploadyCompleteListener
- UploadyFileProgressListener
- UploadyUploadPhotosResult
- testFileTypes
- getUploadPhotosConfig
Uploady
Uploady upload manager.
Parameters
configUploadyConfig
Examples
Using event listeners.
import Uploady, { EVENTS, HOME } from 'uploady'
const uploady = new Uploady({
home: HOME.PROJECT,
homeId: 'foo-project-id',
prospectorBaseUrl: 'https://prospector-url/api/v1'
})
uploady.addEventListener(EVENTS.FILE_PROGRESS, (file, id, progress) => {
console.log(`${file.name} (${id}) progress: ${progress}`)
})
uploady.addEventListener(EVENTS.FILE_SUCCESS, (file, id) => {
console.log(`${file.name} (${id}) success!`)
})
uploady.addEventListener(EVENTS.FILE_ERROR, (file, id, err) => {
console.error(`${file.name} (${id}) error: ${err}`)
})
uploady.addEventListener(EVENTS.FILE_INVALID, (file, id, err) => {
console.error(`${file.name} (${id}) error: ${err}`)
})
uploady.addEventListener(EVENTS.PROGRESS, progress => {
console.log(`Overall Uploady progress: ${progress}`)
})
uploady.addEventListener(EVENTS.COMPLETE, () => {
console.log('Uploady complete!')
})
uploady.uploadPhotos(someFileList)Using async/await.
import Uploady, { HOME } from 'uploady'
const uploady = new Uploady({
home: HOME.EDITOR,
homeId: 'foo-editor-id',
prospectorBaseUrl: 'https://prospector-url/api/v1'
})
// You can still attach event listeners if you like.
// Don't need a `try`/`catch` because this `Promise` should
// always resolve.
const results = await uploady.uploadPhotos(someFileList)
console.log('Uploady complete', results)
results.forEach(results, ({ url, error }) => {
if (error) console.error(`Upload failed for ${url}`, error)
})Deferred configuration
// Not everything needs to be provided upon construction.
const uploady = new Uploady({
prospectorBaseUrl: 'https://prospector-url/api/v1'
})
// ...
// You can wait to set things until it makes sense for you.
uploady.home = HOME.EDITOR
uploady.homeId = 'foo-editor-id'
// or
uploady.configure({
home: HOME.EDITOR,
homeId: 'foo-editor-id',
})
// Just make sure you do it before you try to upload!
uploady.uploadPhotos(someFileList)
// You can also change things after uploading has started, but be careful:
// changing something while an upload is in progress could have strange results!
uploady.homeId = 'different-editor'Using upload photos config
// If you need to know the ID of the entities returned from Prospector when
// the file is given a home, you can process your FileList into a config
// that you can inspect before handing off to Uploady.
const uploadPhotosConfig = getUploadPhotosConfig(someFileList)
// Inspect those IDs.
for (const [file, { id }] of uploadPhotosConfig) {
console.log(`The ID of ${file.name} is ${id}`)
}
// Then hand the config off to Uploady.
const results = await uploady.uploadPhotos(uploadPhotosConfig)
// ...Testing the file types prior to upload
const uploadPhotosConfig = await testFileTypes(
getUploadPhotosConfig(someFileList),
// Optional second parameter allows you to override the defaults
// Mime types default to png and jpeg
[ 'image/jpeg', 'image/png', 'application/json' ]
)
for (const [file, { id, isValid }] of uploadPhotosConfig) {
console.log(`${file.name} isValid? ${isValid}`)
}
// Uploady will ignore any files marked as isValid === false
uploady.uploadPhotos(uploadPhotosConfig)Upload batch information
// The configuration returned from `getUploadPhotosConfig` also has some
// useful information for sorting: `batchCreatedDate`, the Unix timestamp
// of when that upload batch was processed; and `batchIndex`, the index of
// that photo's place in the batch.
const uploadPhotosConfig = getUploadPhotosConfig(someFileList)
for (const [file, { batchCreatedDate, batchIndex }] of uploadPhotosConfig) {
console.log(`${file.name} is part of batch ${batchCreatedDate} with index ${batchIndex}`)
}
// Uploady will ignore any files marked as isValid === false
const results = uploady.uploadPhotos(uploadPhotosConfig)
// ...allowedMimeTypes
home
Type: HOME
homeId
loadExif
Type: boolean
configure
Parameters
configUploadyConfig
- Throws AssertionError if
configis not provided
progress
A ratio 0-1 of the overall progress of the current batch of uploads.
Type: number
uploadPhoto
Uploads a single photo.
Parameters
photoFileconfigUploadPhotoConfigObject
- Throws AssertionError if no
photowas provided. - Throws AssertionError if
Uploadyis not properly configured.
Returns Promise<File>
uploadPhotos
Uploads a batch of photos.
Parameters
photos(FileList | UploadPhotosConfig) See getUploadPhotosConfig.
- Throws AssertionError if
Uploadyis not properly configured.
Returns Promise<Array<UploadyUploadPhotosResult>> Resolves when all
photos are done being processed – regardless of whether or not they
succeeded. This Promise does not reject.
UploadyConfig
Type: Object
Properties
homeHOME? Default value:HOME.PROJECT.homeIdstring? ID of the resource that the files will call home – project, editor, account, etc.loadExifboolean? Default value:true.prospectorBaseUrlstring? Required ifprospector-js-sdkis not already configured.allowedMimeTypesArray<string>? List of valid mime types.
UploadPhotosConfig
Type: Map<File, UploadPhotoConfigObject>
UploadPhotoConfigObject
Type: Object
Properties
allowedMimeTypesArray<string>? Mime types which are valid for this photo.fileType{ext: string, mime: string}?? Detected MIME type and extension.idstring ID of the photo. Should be unique.isValidbooleantrueif the photo's file type is valid;falseif not;undefinedif it has not been checked.uploadMetadataPhotoUploadMetadata
EVENTS
Events dispatched to instances of Uploady. To listen to a particular event,
call addEventListener.
Type: string
EXIF_LOADED
Dispatched when exif data is available for a file. See UploadyFileExifListener
FILE_INVALID
Dispatched when an individual file is of an invalid type. See UploadyFileInvalidListener
FILE_PROGRESS
Dispatched for progress events for individual files being processed. See UploadyFileProgressListener for the listener contract.
FILE_SUCCESS
Dispatched when an individual file has been successfully processed. See UploadyFileSuccessListener for the listener contract.
FILE_ERROR
Dispatched when an individual file encounters an error during processing. See UploadyFileErrorListener for the listener contract.
PROGRESS
Dispatched whenever an individual file finishes processing – regardless of whether or not that processing was successful. See UploadyProgressListener for the listener contract.
COMPLETE
Dispatched when processing of all files is complete – regardless of whether or not they were successful. See UploadyCompleteListener for the listener contract.
HOME
Enum to represent the types of "homes" in which photos will be added.
Type: string
ACCOUNT
(NOT YET SUPPORTED) The resource will be added to an account.
EDITOR
The resource will be added to an editor.
PROJECT
The resource will be added to a project.
ALLOWED_MIME_TYPES
Default set of valid upload types (for photos).
Type: ["image/png", "image/jpeg"]
getPhotoInfo
Loads the file to get its Exif data and dimensions (relative to Exif Orientation).
Parameters
fileFile
Returns Promise<UploadyPhotoInfo>
UploadyPhotoInfo
Type: Object
Properties
isExifRotated90
Determines whether or not the provided Exif data indicates that the file must be rotated 90 degrees.
Parameters
exifObject<(string | number)> Exif data, either in raw form or mapped to string values fromExifMap.getAll()inblueimp-load-image.
Returns boolean
PhotoUploadMetadata
Type: Object
Properties
batchCreatedDatenumber Unix timestamp of when the photo's batch began uploading.batchIndexnumber Index of the photo in its batch.updatedDatenumber? Unix timestamp of when the photo was re-uploaded. NOTE: this is currently identical tobatchCreatedDate.
UploadyFileSuccessListener
Type: Function
Parameters
fileFileidstring Unique ID of the entity from Prospector.entityObject Object returned from Prospector when the file is added to its home.
UploadyFileErrorListener
Type: Function
Parameters
UploadyFileInvalidListener
Type: Function
Parameters
fileFileidstring Unique ID of the entity from Prospector.
UploadyFileExifListener
Type: Function
Parameters
UploadyProgressListener
Type: Function
Parameters
progressnumber 0-1 ratio.
UploadyCompleteListener
Type: Function
UploadyFileProgressListener
Type: Function
Parameters
UploadyUploadPhotosResult
Type: Object
Properties
fileFile The respective photo'sFile.errorError? If the photo failed to upload, theErroris returned here.
testFileTypes
Resolves to a new UploadPhotosConfig with isValid and fileType set on
each config object.
Parameters
uploadPhotosConfigUploadPhotosConfigallowedMimeTypesArray<string> (optional, defaultALLOWED_MIME_TYPES)
Returns Promise<UploadPhotosConfig>
getUploadPhotosConfig
Associates a list of files with various metadata that is useful for processing.
Parameters
filesFileList
Returns UploadPhotosConfig
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago