gpt4 book ai didi

java - FileRepresentation 返回名称来自 router.attach 的文件

转载 作者:行者123 更新时间:2023-11-30 08:53:09 25 4
gpt4 key购买 nike

这是一个奇怪的。我需要使用 reSTLet api 下载文件。我在 GET 方法中创建文件并返回一个 FileRepresentation。下载工作正常,但文件名始终来自 ApplicationRoot 中指定的操作名称。

这是我的 ApplicationRoot 中的相关行:

router.attach("/LogDownload",LogDataDownload.class); 

以及LogDataDownload中的相关方法:

@Get
public Representation run() {

APIResponseWrapper wrapper = new APIResponseWrapper(null, true);
try{
String fileLogPath = Config.getLogFilePath();
File logFile = new File(fileLogPath);
return FileUtility.createRepForFile(logFile);
}catch(Exception e){
wrapper.setErrorStackTrace(e);
}
return new JacksonRepresentation<APIResponseWrapper>(wrapper);
}

这就是我创建 FileRepresentation 的方式:

public static FileRepresentation createRepForFile(File file) {
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
String mimeTypeStr = mimeTypesMap.getContentType(file);
MediaType mt = new MediaType(mimeTypeStr);
FileRepresentation fr = new FileRepresentation(file, mt);
fr.setDisposition(new Disposition(Disposition.TYPE_ATTACHMENT));
return fr;
}

通过此 url 下载没有问题:http://server:port/AppName/LogDownload

但下载的文件名始终是 LoadDownload(或者我在 router.attach 行中输入的任何名称)并且我无法将其重命名为我想要的名称,在本例中为 logFile.txt

最佳答案

关键是要正确设置Disposition。这是完整的方法:

public static FileRepresentation createRepForFile(File file) {
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
String mimeTypeStr = mimeTypesMap.getContentType(file);
MediaType mt = new MediaType(mimeTypeStr);
FileRepresentation fr = new FileRepresentation(file, mt);

Disposition disp = new Disposition(Disposition.TYPE_ATTACHMENT);
disp.setFilename(file.getName());
disp.setSize(file.length());
fr.setDisposition(disp);

return fr;
}

关于java - FileRepresentation 返回名称来自 router.attach 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877719/

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