gpt4 book ai didi

perl - 使用 Web 服务 API 和 Perl 将附件上传到 Bugzilla

转载 作者:行者123 更新时间:2023-12-01 05:38:40 26 4
gpt4 key购买 nike

我正在尝试使用 Bugzilla Webservices API 自动将附件上传到错误,但是当我从 Bugzilla 下载它们时,我上传的 base64 编码消息总是最终损坏。

API 文档位于 http://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.html#add_attachment指定附件需要 base64 编码,所以我使用一段简单的代码来读取本地 png 文件,使用 MIME::Base64 转换为 base64|并使用名为 BZ::Client 的 Bugzilla Perl 客户端 API 上传.

相关代码如下所示 -

my $client = BZ::Client->new("url" => $url,
"user" => $user,
"password" => $password);

open (FILE, "$file") or die "$!";
binmode FILE;
read (FILE, $data, -s FILE);
$base64_encoded_file = encode_base64($data);

my %params = (
ids => [ 1 ],
data => $base64_encoded_file,
file_name => 'filename.png',
content_type => "image/png",
summary => 'blah blah' );


my $response = '';

eval {
$response = $client->api_call("Bug.add_attachment", \%params); # Needs to be hash ref
} or do {
print "ERROR: $@\n";
};

所以相当简单。我相信在后端 Web 服务 API 使用 decode_base64 所以我很惊讶这不起作用。即使使用从 Perl 生成的 base64 字符串直接测试 XMLRPC API 仍然会导致文件损坏。

我也尝试按照 bug report 中的建议剥离换行符,但无济于事。关于 Bug.add_attachment API 调用的实现。

有没有人有过这方面的经验?

谢谢!

最佳答案

read (FILE, $data, -s FILE);

这是错误的:引自 perldoc -f read
Attempts to read LENGTH characters of data.

关键词是尝试: read()可以自由读取少于 LENGTH 个字节。

如果你只是想啜饮 FILE 的内容,你可以使用:
$data = join("", <FILE>);

关于perl - 使用 Web 服务 API 和 Perl 将附件上传到 Bugzilla,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com