我在oracle数据库中将几个文件存储为Blob。我渲染一个列表,向用户显示存储的文件,我想给他一个下载每个文件的链接。所以我在一个函数中思考,让我从存储在数据库中的字节流生成临时文件,并使用临时URL让用户下载该文件。伪代码的方式是这样的:
File tempFile = generateTempFileFrom(bytes[]);
String tempUrl = generateTempUrlFromTempFile(tempFile);
所以我能做到;
<a href="tempUrl">filename</a>
正如我所说,那个伪代码,只是想让你知道我想做什么。
答案 0 :(得分:2)
早上好,
您无需创建任何文件,只需将BLOB转换为Byte数组并将其发送回您的Web客户端。
例如,使用Spring 4: 我在GET / download / {id}上创建了一个控制器。
@Controller
public class BlobController {
@RequestMapping("/download/{id}")
public HttpEntity<byte[]> download(@PathVariable String id) {
// JDBC code to retrieve the BLOB column
stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT FILENAME, FILETYPE, CONTENT FROM MY TABLE WHERE ID = " + id);
Blob blob = rs.getBlob("CONTENT");
String fileName= rs.getString("FILENAME"); // ex. file1
String fileType= rs.getString("FILETYPE"); // ex. pdf
// Transform BLOB to Byte array
int blobLength = (int) blob.length();
byte[] document = blob.getBytes(1, blobLength);
// Set HTTP Header to force the browser to open the download popup
HttpHeaders header = new HttpHeaders();
header.setContentType(new MediaType("application", fileType));
header.set("Content-Disposition", "attachment; filename=" + file1 + "." + fileType);
header.setContentLength(blobLength );
//release the blob and free up memory. (since JDBC 4.0)
blob.free();
return new HttpEntity<byte[]>(document, header);
}
}
然后您应该可以使用此HTML代码下载文件
<a href="/download/1">donwload file 1</a>
<a href="/download/2">donwload file 2</a>
希望这很清楚。
祝你好运!