使用Base64 图片上传适配器,CKEditor 显然将图片编码为 Base64 格式,并将结果插入为<img src="data:image/png;base64, code... >
. 代码可能很长;我想要上传的图片 URL。
在我的应用程序中,我需要以下功能:
将图像转换为 Base64。我基本上知道该怎么做:
async function encodeSingleFileTo64base(targetFile: File): Promise<string> {
const fileReader: FileReader = new FileReader();
fileReader.readAsDataURL(targetFile);
return new Promise<string>((resolve: (encodedFile: string) => void, reject: (error: Error) => void): void => {
fileReader.onload = (filedHasBeenReadEvent: ProgressEvent<FileReader>): void => {
if (filedHasBeenReadEvent.target === null || filedHasBeenReadEvent.target.result === null) {
reject(new Error("Failed to encode the image file."));
return;
}
resolve(String(filedHasBeenReadEvent.target.result));
};
});
}
通过 GraphQL 提交 Base64 代码。我基本上可以做到:
import AWSAmplifyAPI, { graphqlOperation, GraphQLResult } from "@aws-amplify/api";
async function uploadPhotoAndGetURL(photoBase64: string): Promise<string> {
return (await AWSAmplifyAPI.graphql(graphqlOperation(
`mutation($photoBase64: String!) { uploadPhoto(photoBase64: $photoBase64) }`,
{ photoBase64 }
))).uploadPhoto;
}
让 CK Editor 添加从响应 URL 接收到的src=""(这是当前问题的主题)。
这是文档中的解决方案模板:
class MyUploadAdapter {
constructor( loader ) {
this.loader = loader;
}
upload() {
return loader.file
.then( file => server.upload( file ) );
}
abort() {
server.abortUpload();
}
}
第一个问题:如何在 upload() 方法中链接两个异步函数?
编码和数据提交都是异步操作。我一直很困惑如何与loader.file.then().
第二个问题:如何将收到的 URL 传递给 CK 编辑器?
我无法从建议的解决方案模板中理解我们如何接收上传的图像 URL 并将其传递给src属性。
呼啦一阵风
相关分类