gpt4 book ai didi

java - zip 格式的 ReSTLet POST 响应

转载 作者:行者123 更新时间:2023-11-30 11:04:18 26 4
gpt4 key购买 nike

我正在对 reSTLet 执行 POST 并且需要返回一个 zip 文件。但是,虽然创建的文件是 zip,但该方法返回乱码。

我尝试按照建议包装 FileRepresentation here:

new org.restlet.engine.application.EncodeRepresentation(org.restlet.data.Encoding.ZIP, representation);

还尝试添加这样的 Produces 注释:

@Produces({"application/x-zip-compressed"})

但两者都不起作用。该表示形式返回为乱码字符串,Content-Type header 保留为 application/octet-stream。我错过了什么?

这些是请求 header 。注意 Accept-Encoding: gzip, deflate:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,he;q=0.6

响应头:

Vary: Accept-Encoding
Last-Modified: Wed, 06 May 2015 14:49:03 GMT
Content-Disposition: attachment; filename=_backup_20150506.zip; size=162191
Date: Wed, 06 May 2015 14:49:03 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.2.1
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Set-Cookie: JSESSIONID=5F10BBBDC58D5C3D6C0474FA12C44FB9; Path=/AppName/; Domain=localhost
Content-Encoding: gzip
Content-Type: application/octet-stream
Transfer-Encoding: chunked

编辑:我还尝试在创建表示时更改媒体类型:

MediaType mt = MediaType.APPLICATION_ZIP;
FileRepresentation fr = new FileRepresentation(file, mt);

响应内容类型更改为 Content-Type: application/zip 但返回值仍然是乱码字符串。

最佳答案

做到这一点的正确方法是您使用的方法:

public class MyServerResource extends ServerResource {
@Post
public Representation test(Representation repr) {
FileRepresentation outputRepresentation
= new FileRepresentation(new File("(...)"),
MediaType.APPLICATION_ZIP);
return outputRepresentation;
}
}

所以这应该可行。

在这样的代码中使用 curl,这是我所拥有的:

$ curl -X POST http://localhost:8182/test > mycontent.zip
$ unzip mycontent.zip
Archive: mycontent.zip
extracting: test.txt

此外,这是我对 curl 的详细模式的看法:

curl -X POST --verbose http://localhost:8182/test
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8182 (#0)
> POST /test HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8182
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-type: application/zip
< Last-modified: Thu, 07 May 2015 08:08:59 GMT
< Content-length: 134
* Server Restlet-Framework/2.3.1 is not blacklisted
< Server: Restlet-Framework/2.3.1
< Accept-ranges: bytes
< Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
< Date: Thu, 07 May 2015 08:19:26 GMT
<

请注意,如果您想在浏览器的下载对话框中配置提示,可以使用标题 Disposition

否则,“在Resltet 上启用JSON 响应实体的GZIP 压缩”对应于ReSTLet 对整个响应内容的自动压缩。浏览器支持这一点,可以在显示之前直接解压缩内容。我认为这不是您真正需要/期望的。如果是这样,您可能对此链接感兴趣:https://templth.wordpress.com/2015/02/23/optimizing-restlet-server-applications/ .

希望对你有帮助,蒂埃里

关于java - zip 格式的 ReSTLet POST 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30081733/

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