我创建了一个简单的VueJS应用程序,并试图实现一个文件上传的示例。
我使用以下proto文件:
syntax = "proto3";
message File {
bytes content = 1;
}
message MetaData {
string name = 1;
string type = 2;
}
message FileUploadRequest {
oneof request {
MetaData metadata = 1;
File file = 2;
}
}
enum Status {
PENDING = 0;
IN_PROGRESS = 1;
SUCCESS = 2;
FAILED = 3;
}
message FileUploadResponse {
string name = 1;
Status status = 2;
}
service FileUploadService {
rpc upload(stream FileUploadRequest) returns(FileUploadResponse);
}
首先,我生成客户机存根:
protoc -I=${DIR:-./api/} fileUpload.proto \
--js_out=import_style=commonjs,binary:${OUT_DIR:-./api} \
--grpc-web_out=import_style=typescript,mode=grpcwebtext:${OUT_DIR:-./api}
它在api目录中生成三个文件:
├── api
│ ├── FileUploadServiceClientPb.ts
│ ├── fileUpload_pb.d.ts
| ├── fileUpload.proto
│ └── fileUpload_pb.js
└── src
├── App.vue
└── main
├── services
│ └── fileService.ts
└── views
我现在试图在FileService中实现生成的客户端代码:
import { FileUploadServiceClient } from '../../../api/FileUploadServiceClientPb';
import { FileUploadRequest, FileUploadResponse, MetaData } from '../../../api/fileUpload_pb';
export default class FileService {
constructor(readonly fileUploadClient: FileUploadServiceClient) { }
uploadFile(file: File): Promise<FileUploadResponse | null> {
...
this.fileUploadClient.upload(request, {}, (err, response) => {
...
}
...
}
}
出现以下两个问题
消息和类型的Uncaught SyntaxError: import not found: MetaData
.
我正在使用libprotoc 3.20.1和protoc grpc-web 1.3.1
我已经搜索了一点,但没有找到一个可以帮助我的解决方案:
不幸的是,不同的import_style配置和grpc_out模式也没有解决这个问题。顺便说一句,在夸克应用程序中生成服务器端代码的工作原理是完全正确的。
发布于 2022-05-31 13:20:53
我也没有成功地使用web插件。protobuf插件使用起来要好得多,并且实际工作得很好:https://github.com/timostamm/protobuf-ts/blob/master/MANUAL.md (这是他们手册的链接)。
我使用的包是:
https://stackoverflow.com/questions/72425164
复制相似问题