gpt4 book ai didi

java - 文件下载在 Play 框架 2.2.2 中返回损坏的文件(我认为)

转载 作者:行者123 更新时间:2023-12-01 13:00:41 25 4
gpt4 key购买 nike

我正在努力让文件上传/下载在 Play 框架 2.2.2 中正常工作。我有一个学生类(class),其中有一个名为“cv”的字段。它用 @Lob 注释,如下所示:

@Lob
public byte[] cv;

以下是上传和下载方法:

public static Result upload() {

MultipartFormData body = request().body().asMultipartFormData();
FilePart cv = body.getFile("cv");

if (cv != null) {
filenameCV = cv.getFilename();
String contentType = cv.getContentType();
File file = cv.getFile();
Http.Session session = Http.Context.current().session();
String studentNr = session.get("user");
Student student = Student.find.where().eq("studentNumber", studentNr).findUnique();

InputStream is;
try {
is = new FileInputStream(file);
student.cv = IOUtils.toByteArray(is);
} catch (IOException e) {
Logger.debug("Error converting file");
}

student.save();
flash("ok", "Vellykket! Filen " + filenameCV + " ble lastet opp til din profil");
return redirect(routes.Profile.profile());
} else {
flash("error", "Mangler fil");
return redirect(routes.Profile.profile());
}
}

public static Result download() {
Http.Session session = Http.Context.current().session();
Student student = Student.find.where().eq("studentNumber", session.get("user")).findUnique();

File f = new File("/tmp/" +filenameCV);

FileOutputStream fos;

try {
fos = new FileOutputStream(f);
fos.write(student.cv);
fos.flush();
fos.close();

} catch(IOException e) {

}

return ok(f);
}

该文件似乎已正确保存到数据库(cv 字段填充了数据,但它对我来说显然很神秘,所以我不确定内容是否应该是它应该的内容)

当我访问我的网站并单击“下载简历”链接(运行下载操作)时,文件被下载但无法打开 - 说 PDF 查看器无法识别该文件等。(文件上传的文件必须是 PDF)

对可能出现的问题有什么想法吗?

最佳答案

不要将文件保存在数据库中,文件系统对此要好得多!使用一些唯一的名称将上传的文件保存在磁盘上,然后在数据库中仅将文件的路径保留为字符串!

  • 从长远来看更便宜 ( as said many times )
  • 处理下载更容易,即在 Play 中提供 PDF 所需的全部内容是:

    public static Result download() {
    File file = new File("/full/path/to/your.pdf");
    return ok(file);
    }

它会设置适当的标题,例如 Content-DispositionContent-LengthContent-Type,不仅适用于 PDF

关于java - 文件下载在 Play 框架 2.2.2 中返回损坏的文件(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535887/

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