我有一个引用图像的集合,当用户使用新图像更新该集合时,我想删除旧图像。我保留了对旧图像的URL的引用,以传递到用云代码编写的函数中。
我在我的计算机上运行所有本地操作,但是当我在Heroku上运行服务器运行时,我遇到了同样的问题。这是从iOS SDK调用的。
这是有问题的功能:
Parse.Cloud.define('removeOldFilesFromDB', function (request, response) {
var fileUrls = request.params.fileUrls;
var promises = [];
for (var a = 0; a < fileUrls.length; a++) {
promises.push(Parse.Cloud.httpRequest({
method: 'DELETE',
url: fileUrls[a],
headers: {
'X-Parse-Application-Id': process.env.APP_ID || 'myAppId',
'X-Parse-Master-Key': process.env.MASTER_KEY || 'myMasterKey'
}
}));
}
Parse.Promise.when(promises).then( function (result) {
console.log("Successfully deleted files");
response.success(result);
}, function(a,b,c,d,e) {
console.log("Nope jacked it up!");
response.error("Error deleting files");
});
})
当我调用有问题的代码时,我根本不会在解析服务器日志中看到DELETE请求。
我的配置中设置了verbose: true
标志,这是我从客户端进行此调用时获得的日志的详细输出:
verbose: POST /parse/functions/removeOldFilesFromDB { host: 'e0ae0682.ngrok.io',
'x-parse-client-version': 'i1.12.0',
accept: '*/*',
'x-parse-session-token': 'r:5290c76c47678213770765d990ee38b6',
'x-parse-application-id': 'myAppId',
'x-parse-client-key': 'myClientKey',
'x-parse-installation-id': '3fafc219-1c63-4d68-b42f-5caa3e1c27cb',
'accept-language': 'en-us',
'accept-encoding': 'gzip, deflate',
'x-parse-os-version': '8.1 (12B411)',
'content-type': 'application/json; charset=utf-8',
'content-length': '204',
'user-agent': 'Spin%20the%20Bottle/1 CFNetwork/711.1.12 Darwin/14.0.0',
'x-parse-app-build-version': '1',
'x-parse-app-display-version': '1.0',
'x-forwarded-for': '71.163.238.223' } {
"fileUrls": [
"http://e0ae0682.ngrok.io/parse/files/myAppId/7b5b50e2871af27971be0425f367ab96_file.bin",
"http://e0ae0682.ngrok.io/parse/files/myAppId/cff909602b60b15331b1ac60a4f08697_file.bin"
]
}
Nope jacked it up!
verbose: error: code=141, message=Error deleting files
所以奇怪的是DELETE调用甚至没有出现在那里。我用Parse.Cloud.httpRequest方法调用了什么错误吗?
如果我在浏览器中点击了fileUrl的值,它会下载我尝试删除的图片,以便路径正确。
这是最新发布的parse-server版本,2.2.10。
这些是我遵循的指示,认为这是正确的方法:
https://parse.com/docs/rest/guide/#files-deleting-files
这就是来自云代码的剩余电话:
https://parse.com/questions/making-a-rest-call-from-within-cloud-code
根据它,它说我可以使用Parse.Cloud.httpRequest进行REST调用,所以我不确定你指的是不正确的方法。这两个都有文档的链接,这就是我所遵循的。
所以我显然做错了但我不确定,有人能帮帮忙吗?
答案 0 :(得分:0)
只需从文件网址中删除myAppId。
(例如)
这
http://e0ae0682.ngrok.io/parse/files / myAppId /7b5b50e2871af27971be0425f367ab96_file.bin
到
http://e0ae0682.ngrok.io/parse/files/7b5b50e2871af27971be0425f367ab96_file.bin