在实际保存之前,如何使用Cloud Code读取保存到Parse服务器的文件?
我正在尝试使用Cloud Code检查用户提交的图像是否属于受支持的文件类型而不是太大。
我知道我需要在服务器端执行此验证,我认为我应该使用beforeSave使用Cloud Code执行此操作 - 该文档甚至还有一个关于数据验证的具体示例,但它没有解释如何处理文件而我不能想办法。
我已经尝试了保存文件的文档化方法,即。
file = fileUploadControl.files[0];
var parseFile = new Parse.File(name, file);
currentUser.set("picture", parseFile);
currentUser.save();
在云代码中,Parse.Cloud.beforeSave(Parse.User, (request, response) => { // code here });
但是1.这仍然实际上将文件保存在我的服务器上,对吗?我想首先检查文件大小,以避免保存太多大文件...
2.即便如此,我也不知道在beforeSave回调中该怎么做。我似乎只能访问已保存图像的URL(证明它已被上传),并且在决定是否继续附加之前,必须执行另一个https请求以检查文件大小和类型似乎非常违反直觉。文件到User对象。
(我目前正在使用remote-file-size
和file-type
来检查上传文件的大小和类型,但这里也没有成功)。
我也试过调用一个Cloud函数,但感觉我做的不对,而且我遇到了同样的问题。我可以调用Cloud函数并将保存的ParseFile作为参数传递,然后我知道如何使用masterkey从Cloud Code将其保存到User对象,但是如上所述它仍然涉及将文件上传到服务器然后重新 - 使用其URL获取它。
我在这里错过了什么吗?是否有办法在Parse.File上执行类似于beforeSave的操作,然后如果文件不符合某些条件则停止保存文件?
干杯。
回答如下:如果必须对文件执行某些操作,则parse允许您覆盖文件适配器以处理文件操作。
您可以指明要在Parse Server实例中使用的文件适配器:
var FSStoreAdapter = require('./file_adapter');
var api = new ParseServer({
databaseURI: databaseUri ,
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID,
filesAdapter: fs_store_adapter, // YOUR FILE ADAPTER
masterKey: process.env.MASTER_KEY, //Add your master key here. Keep it secret!
serverURL: "https://yourUrl", // Don't forget to change to https if needed
publicServerURL: "https://yourUrl",
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
maxUploadSize: "500mb" //you will now have 500mb limit :)
});
也就是说,您也可以在实例中指定maxUploadSize,如最后一行所示。
在实际保存之前,如何使用Cloud Code读取保存到Parse服务器的文件?
我正在尝试使用Cloud Code检查用户提交的图像是否属于受支持的文件类型而不是太大。
我知道我需要在服务器端执行此验证,我认为我应该使用beforeSave使用Cloud Code执行此操作 - 该文档甚至还有一个关于数据验证的具体示例,但它没有解释如何处理文件而我不能想办法。
我已经尝试了保存文件的文档化方法,即。
file = fileUploadControl.files[0];
var parseFile = new Parse.File(name, file);
currentUser.set("picture", parseFile);
currentUser.save();
在云代码中,Parse.Cloud.beforeSave(Parse.User, (request, response) => { // code here });
但是1.这仍然实际上将文件保存在我的服务器上,对吗?我想首先检查文件大小,以避免保存太多大文件...
2.即便如此,我也不知道在beforeSave回调中该怎么做。我似乎只能访问已保存图像的URL(证明它已被上传),并且在决定是否继续附加之前,必须执行另一个https请求以检查文件大小和类型似乎非常违反直觉。文件到User对象。
(我目前正在使用remote-file-size
和file-type
来检查上传文件的大小和类型,但这里也没有成功)。
我也试过调用一个Cloud函数,但感觉我做的不对,而且我遇到了同样的问题。我可以调用Cloud函数并将保存的ParseFile作为参数传递,然后我知道如何使用masterkey从Cloud Code将其保存到User对象,但是如上所述它仍然涉及将文件上传到服务器然后重新 - 使用其URL获取它。
我在这里错过了什么吗?是否有办法在Parse.File上执行类似于beforeSave的操作,然后如果文件不符合某些条件则停止保存文件?
干杯。
回答如下:如果必须对文件执行某些操作,则parse允许您覆盖文件适配器以处理文件操作。
您可以指明要在Parse Server实例中使用的文件适配器:
var FSStoreAdapter = require('./file_adapter');
var api = new ParseServer({
databaseURI: databaseUri ,
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID,
filesAdapter: fs_store_adapter, // YOUR FILE ADAPTER
masterKey: process.env.MASTER_KEY, //Add your master key here. Keep it secret!
serverURL: "https://yourUrl", // Don't forget to change to https if needed
publicServerURL: "https://yourUrl",
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
maxUploadSize: "500mb" //you will now have 500mb limit :)
});
也就是说,您也可以在实例中指定maxUploadSize,如最后一行所示。