Как обслуживать файл с правильным именем файла и расширением в Koa? - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь разрешить пользователю загружать файл с помощью каркаса Koa, сохранять его на стороне сервера и разрешать его повторную загрузку позже.

При загрузке файла с koa-body файл загружается без расширения и случайной строки. Как передать файл в качестве файла загрузки с оригинальным именем файла и расширением?

Все онлайн-примеры, которые я нашел в Интернете, предполагают, что файл был загружен с оригинальным именем файла, а здесь это не так.

const bodyparser = require('koa-body');

app.use(bodyparser({
  formidable: { uploadDir: './uploads' },
  multipart: true,
  basedir: './views',
  apps: app,
}));

Файлы правильно загружаются в папку загрузки, но имя файла и расширение удаляются и заменяются случайной строкой. (напр. upload_1d421fb33fcd1d43efc41352975358da)

router.post('/add', add);
router.get('/download/:filename', getDownload);

async function add(ctx) {
  const { body } = ctx.request;
  const thingfile = await ctx.request.files.thingfile;
  things.push({ name: body.thing, file: thingfile });

  ctx.redirect('/');
}

async function getDownload(ctx) {
  const {filename} = ctx.params;
  ctx.attachment(filename);
  await send(ctx, fname, { root: __dirname + '/uploads' });
}

Я могу загрузить файл при вызове URL / uploads / upload_1d421fb33fcd1d43efc41352975358da, но файл должен быть переименован вручную на стороне клиента для правильной работы.

Очевидно, я что-то упускаю или делаю это совершенно неправильно. Я немного заблудился, поэтому спасибо заранее, чтобы направить меня обратно на ходу!

1 Ответ

0 голосов
/ 19 апреля 2019

Я использую тело koa и могу получить имя

router.post('/stream', async (ctx) => {
  const { file } = ctx.request.files
  const { path, name } = file
  ctx.body = name
})

Вы можете добавить атрибут имени в конфигурацию промежуточного программного обеспечения.

app.use(bodyparser({
  multipart: true,
  formidable: {

    keepExtensions: true,
    onFileBegin: (name, file) => {

      console.log(name)
      // get the file extension
      const ext = name.split('.').pop()
      console.log(ext)

    },
  },
}))

вы можете console.logимя

...