在Restlet put方法中存储文件
Store file in Restlet put method
我正在尝试存储通过 PUT 发送到 Restlet 资源的文件。
curl 语句如下所示:
curl -X PUT "http://localhost:8080/EAIConfig/ri/media" --data-binary img019.png
这是我的资源实现:
@Override
protected Representation put(Representation entity) throws ResourceException {
try {
InputStream in = entity.getStream();
OutputStream out = new FileOutputStream("/Temp/media-file.png");
IOUtils.copy(in,out);
out.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new EmptyRepresentation();
}
这运行没有错误。但是结果 /Temp/media-file.png
确实包含发送文件的名称而不是发送的图像数据。
知道如何获取文件内容吗?
我认为这不是您的 Restlet 代码中的问题,而是您使用 curl 调用它的方式中的问题。
您忘记了参数 --data-binary
中的“@”。你应该使用类似的东西:
curl -X PUT "http://localhost:8080/EAIConfig/ri/media" --data-binary "@img019.png"
我试了一下你的代码,它对我有用。我想你是来自 Commons IO 的 class IOUtils
。
一个小评论。您的方法 put
需要定义为 public 并带有注解 @Put
才能被 Restlet 直接调用 ;-)
希望对你有帮助,
蒂埃里
我正在尝试存储通过 PUT 发送到 Restlet 资源的文件。
curl 语句如下所示:
curl -X PUT "http://localhost:8080/EAIConfig/ri/media" --data-binary img019.png
这是我的资源实现:
@Override
protected Representation put(Representation entity) throws ResourceException {
try {
InputStream in = entity.getStream();
OutputStream out = new FileOutputStream("/Temp/media-file.png");
IOUtils.copy(in,out);
out.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new EmptyRepresentation();
}
这运行没有错误。但是结果 /Temp/media-file.png
确实包含发送文件的名称而不是发送的图像数据。
知道如何获取文件内容吗?
我认为这不是您的 Restlet 代码中的问题,而是您使用 curl 调用它的方式中的问题。
您忘记了参数 --data-binary
中的“@”。你应该使用类似的东西:
curl -X PUT "http://localhost:8080/EAIConfig/ri/media" --data-binary "@img019.png"
我试了一下你的代码,它对我有用。我想你是来自 Commons IO 的 class IOUtils
。
一个小评论。您的方法 put
需要定义为 public 并带有注解 @Put
才能被 Restlet 直接调用 ;-)
希望对你有帮助, 蒂埃里