Skip to content

file.path is undefined #52

@Ivan-Feofanov

Description

@Ivan-Feofanov

I'm trying to use the local upload option but it doesn't work - I'm getting the error The "oldPath" argument must be of type string or an instance of Buffer or URL. Received undefined.

After searches, I found that the file I'm receiving in the upload method has no path property. Why it can happen and how can I fix it?

Provider:

class LocalProvider extends BaseProvider {
  constructor (options: LocalUploadOptions) {
    super(options.bucket)
    if (!fs.existsSync(options.bucket)) {
      throw new Error('No folder')
    }
  }

  public async upload (file: UploadedFile, key: string): Promise<any> {
    const filePath = this.path(key)

    await fs.promises.mkdir(path.dirname(filePath), { recursive: true })
    await fs.promises.rename(file.path, filePath)
  }

  public async delete (key: string, bucket: string): Promise<any> {
    await fs.promises.unlink(this.path(key, bucket))
  }

  // eslint-disable-next-line class-methods-use-this
  public path (key: string, bucket?: string): string {
    return `${path.join(this.bucket, key)}`
  }
}

Usage:

      resource: { model: dmmf.modelMap.HelpRequest, client: prisma },
      options: {
        properties: {
          image: { isVisible: false }
        }
      },
      features: [uploadFeature({
        provider: new LocalProvider({ bucket: 'public' }),
        properties: {
          key: 'image', // to this db field feature will safe S3 key,
          mimeType: 'mimeType' // this property is important because allows to have previews,
        },
        validation: {
          mimeTypes: ['image/png', 'image/jpg', 'image/jpeg']
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions