如何在 PFImageView 中显示使用云代码上传的图像
How to display an image uploaded using cloud code in PFImageView
这是我的场景:
- 我需要将从 url 获得的图像保存到 Parse 后端。
- 从 Parse 后端检索相同的图像并将其显示在 iOS 中的 PFImageView 中。
这是我做的:
将图像保存到 Parse 后端:
promise = promise.then(function(){
/* Download image */
return Parse.Cloud.httpRequest({
url: imageUrl
});
}).then(function(imageResponse){
/* Use parse-image cloud module to get image */
var image = new Image();
return image.setData(imageResponse.buffer);
}).then(function(image){
/* Save image as parse file */
var imageInBase64 = image.data().base64;
var parseFile = new Parse.File(imageName, {base64: imageInBase64});
return parseFile.save();
}).then(function(parseFile){
/* Set PFFile to an object */
newEvent.set("eventImage", parseFile);
});
然后我通过单击相关对象的 PFFile 字段验证了 PFFile 已保存在后端。当我单击该文件时,我没有看到图像,而是看到了以下文本。
{"_ApplicationId":"xxxx","_JavaScriptKey":"xxxx","_ClientVersion":"js1.6.14","_InstallationId":"xxxx","_SessionToken":"r:xxxx"}
在 PFImageView 中显示相同的图像:
@IBOutlet weak var eventImage: PFImageView!
if let imageFile = selectedEvent.eventImage as PFFile {
eventImage.image = UIImage(named: "Event Image")
eventImage.file = imageFile
eventImage.loadInBackground()
}
不幸的是,这不起作用,PFImageView 只是空白。看起来 PFFile 是根据我得到 imageFile.url 和 imageFile.name:
的以下结果这一事实下载的
imageFile.url : https://files.parsetfss.com/xxxx/tfss-xxxx
imageFile.name: tfss-xxxx
我想知道这里的问题是否是如何将图像上传到云代码中的 Parse。这里我将其转换为base64,然后保存文件。
已解决:
问题出在使用 var imageInBase64 = image.data().base64;
上。我的替换云代码如下:
promise = promise.then(function(){
/* Download image */
return Parse.Cloud.httpRequest({
url: imageUrl
});
}).then(function(imageResponse){
/* Use parse-image cloud module to get image */
var image = new Image();
return image.setData(imageResponse.buffer);
}).then(function(image){
format = image.format();
return image.data();
}).then(function(buffer)){
/* Save image as parse file */
var imageInBase64 = buffer.toString("base64");
var parseFile = new Parse.File(imageName + "." + format, {base64: imageInBase64});
return parseFile.save();
}).then(function(parseFile){
/* Set PFFile to an object */
newEvent.set("eventImage", parseFile);
});
这是我的场景:
- 我需要将从 url 获得的图像保存到 Parse 后端。
- 从 Parse 后端检索相同的图像并将其显示在 iOS 中的 PFImageView 中。
这是我做的:
将图像保存到 Parse 后端:
promise = promise.then(function(){ /* Download image */ return Parse.Cloud.httpRequest({ url: imageUrl }); }).then(function(imageResponse){ /* Use parse-image cloud module to get image */ var image = new Image(); return image.setData(imageResponse.buffer); }).then(function(image){ /* Save image as parse file */ var imageInBase64 = image.data().base64; var parseFile = new Parse.File(imageName, {base64: imageInBase64}); return parseFile.save(); }).then(function(parseFile){ /* Set PFFile to an object */ newEvent.set("eventImage", parseFile); });
然后我通过单击相关对象的 PFFile 字段验证了 PFFile 已保存在后端。当我单击该文件时,我没有看到图像,而是看到了以下文本。
{"_ApplicationId":"xxxx","_JavaScriptKey":"xxxx","_ClientVersion":"js1.6.14","_InstallationId":"xxxx","_SessionToken":"r:xxxx"}
在 PFImageView 中显示相同的图像:
@IBOutlet weak var eventImage: PFImageView! if let imageFile = selectedEvent.eventImage as PFFile { eventImage.image = UIImage(named: "Event Image") eventImage.file = imageFile eventImage.loadInBackground() }
不幸的是,这不起作用,PFImageView 只是空白。看起来 PFFile 是根据我得到 imageFile.url 和 imageFile.name:
的以下结果这一事实下载的imageFile.url : https://files.parsetfss.com/xxxx/tfss-xxxx imageFile.name: tfss-xxxx
我想知道这里的问题是否是如何将图像上传到云代码中的 Parse。这里我将其转换为base64,然后保存文件。
已解决:
问题出在使用 var imageInBase64 = image.data().base64;
上。我的替换云代码如下:
promise = promise.then(function(){
/* Download image */
return Parse.Cloud.httpRequest({
url: imageUrl
});
}).then(function(imageResponse){
/* Use parse-image cloud module to get image */
var image = new Image();
return image.setData(imageResponse.buffer);
}).then(function(image){
format = image.format();
return image.data();
}).then(function(buffer)){
/* Save image as parse file */
var imageInBase64 = buffer.toString("base64");
var parseFile = new Parse.File(imageName + "." + format, {base64: imageInBase64});
return parseFile.save();
}).then(function(parseFile){
/* Set PFFile to an object */
newEvent.set("eventImage", parseFile);
});