-
Hi, i am saving uploaded files using adonis drive and they are uploaded to the destination folder successfully but i cannot serve them again although the I have 2 folders, one called when i try to read the a file via the url in the browser:
i get an error
{
"typescript": true,
"commands": [
"./commands",
"@adonisjs/core/build/commands/index.js",
"@adonisjs/repl/build/commands",
"@adonisjs/lucid/build/commands"
],
"exceptionHandlerNamespace": "App/Exceptions/Handler",
"aliases": {
"App": "app",
"Config": "config",
"Database": "database",
"Contracts": "contracts"
},
"preloads": ["./start/routes", "./start/kernel"],
"providers": ["./providers/AppProvider", "@adonisjs/core", "@adonisjs/lucid"],
"aceProviders": ["@adonisjs/repl"],
"directories": {
"public": "public"
},
"metaFiles": [
{
"pattern": "public/**",
"reloadServer": false
}
]
}
import Env from "@ioc:Adonis/Core/Env";
import { DriveConfig } from "@ioc:Adonis/Core/Drive";
const driveConfig: DriveConfig = {
disk: Env.get("DRIVE_DISK"),
disks: {
local: {
driver: "local",
visibility: "public",
root: "uploads",
serveFiles: true,
basePath: "/uploads",
},
},
};
export default driveConfig;
import { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
import Database from "@ioc:Adonis/Lucid/Database";
import Drive from "@ioc:Adonis/Core/Drive";
import ProductValidator from "App/Validators/ProductValidator";
import moment from "moment";
import fs from "fs";
const placeholderImagePath = "images/image-not-available-min.jpg";
const uploadedDirPath = "./products/images/";
const placeholderImageName = "image-not-available-min.jpg";
export default class ProductsController {
public async store(ctx: HttpContextContract) {
const payload = await ctx.request.validate(ProductValidator);
payload.image ? await payload.image.moveToDisk(uploadedDirPath) : null;
const isExist = await Drive.exists(
"products/images/ckus1ookl0002e7lb5jub3ybt.jpg"
);
const url = await Drive.getSignedUrl(
"products/images/ckus1ookl0002e7lb5jub3ybt.jpg"
);
console.log(isExist, url);
const productId = await Database.table("products")
.insert({
imagePath: payload.image
? payload.image.filePath
: placeholderImagePath,
imageSize: payload.image
? payload.image.size
: fs.statSync("./public/" + placeholderImagePath).size,
imageOriginalName: payload.image
? payload.image.clientName
: placeholderImageName,
imageName: payload.image
? payload.image.fileName
: placeholderImageName,
imageExtention: payload.image
? payload.image.extname
: placeholderImageName.substr(placeholderImageName.indexOf(".") + 1),
name: payload.name,
price: payload.price,
productDetails: payload.productDetails,
suggestedUse: payload.suggestedUse,
priceDetails: payload.priceDetails,
creationTime: moment().format("LTS"),
creationDate: moment().format("D/M/Y"),
})
.returning("id");
ctx.response.json({ message: "Product stored", productId: productId });
}
public async update(ctx: HttpContextContract) {
const id = ctx.request.param("id");
const product = await Database.from("products").where("id", id);
const payload = await ctx.request.validate(ProductValidator);
if (product.length === 1) {
payload.image
? await payload.image.moveToDisk("./products/images")
: null;
const updatedRowsCount = await Database.from("products")
.where("id", id)
.update({
imagePath: payload.image
? payload.image.filePath
: placeholderImagePath,
imageSize: payload.image
? payload.image.size
: fs.statSync("./public/" + placeholderImagePath).size,
imageOriginalName: payload.image
? payload.image.clientName
: placeholderImageName,
imageName: payload.image
? payload.image.fileName
: placeholderImageName,
imageExtention: payload.image
? payload.image.extname
: placeholderImageName.substr(
placeholderImageName.indexOf(".") + 1
),
name: payload.name,
price: payload.price,
productDetails: payload.productDetails,
suggestedUse: payload.suggestedUse,
priceDetails: payload.priceDetails,
updateTime: moment().format("LTS"),
updateDate: moment().format("D/M/Y"),
});
fs.unlink(product[0].imagePath, (error) => {
if (error) console.log(error);
else {
console.log("File " + product[0].imagePath + " deleted");
}
});
ctx.response.json({
message: "Product updated",
updatedRowsCount: updatedRowsCount,
});
} else {
ctx.response.json({
message: "Failed to update product",
});
}
}
} |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 4 replies
-
Hey @FuridamuFaita! 👋🏻 You need to use the |
Beta Was this translation helpful? Give feedback.
-
The problem was in the It is supposed to be |
Beta Was this translation helpful? Give feedback.
-
Is there way to display 404 instead of |
Beta Was this translation helpful? Give feedback.
The problem was in the
config/drive.ts
file inroot: "uploads"
It is supposed to be
root: Application.makePath("uploads"),
orroot: Application.tmpPath("uploads"),