java不在磁盘创建文件,直接返回流给用户下载
发布网友
发布时间:2022-04-26 16:47
我来回答
共4个回答
懂视网
时间:2022-04-26 21:08
有时候我们可能需要在其他的网页上展示我们自己的小程序中某些页面的小程序码,这种时候,我们需要用到小程序的生成小程序码的相关接口。
工具选型
我们仍然选用简单方便的weixin-java-miniapp来完成此功能。
项目配置
详见我们的另一篇文章点此进入
生成小程序码的相关类型
小程序码的其他生成方式以及相关类型在这篇文章点此进入中介绍的较为详细,此处不再赘述,以下仅以生成不限制张数的这种类型来做一个示例。
生成小程序码图片
先获取小程序的service实例wxMaService。
再获取二维码相关操作的service实例
// 获取小程序服务实例
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
// 获取小程序二维码生成实例
WxMaQrcodeService wxMaQrcodeService = wxMaService.getQrcodeService();
// 设置小程序二维码线条颜色为黑色
WxMaCodeLineColor lineColor = new WxMaCodeLineColor("0", "0", "0");
// 生成二维码图片字节流(此处也可以生成File类型,如果想将图片文件保存到服务器就生成File类型,此处生成byte[]类型,方便直接返回文件流到前端)
byte[] qrCodeBytes = null;
qrCodeBytes = wxMaQrcodeService.createWxaCodeUnlimitBytes(String.valueOf(id), null, 430, false, lineColor, false);
返回文件流
将文件流写到response中,相关示例代码如下:
@RestController
@RequestMapping("/qrCode")
public class QrCodeController {
private static final Logger logger = LoggerFactory.getLogger(QrCodeController.class);
@GetMapping("/getMiniappQrCode/{id}")
public void getMiniappQrCode(@PathVariable("id") Long id, HttpServletRequest request, HttpServletResponse response) throws Exception{
// 获取小程序服务实例
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
// 获取小程序二维码生成实例
WxMaQrcodeService wxMaQrcodeService = wxMaService.getQrcodeService();
// 设置小程序二维码线条颜色为黑色
WxMaCodeLineColor lineColor = new WxMaCodeLineColor("0", "0", "0");
// 生成二维码图片字节流
byte[] qrCodeBytes = null;
try{
qrCodeBytes = wxMaQrcodeService.createWxaCodeUnlimitBytes(String.valueOf(id), null, 430, false, lineColor, false);
} catch(Exception e){
logger.error("生成小程序码出错", e);
}
// 设置contentType
response.setContentType("image/png");
// 写入response的
输出流中
OutputStream stream = response.getOutputStream();
stream.write(qrCodeBytes);
stream.flush();
stream.close();
}
}
热心网友
时间:2022-04-26 18:16
没懂你的意思,用户要下载的东西是什么?不是在磁盘上的东西么?还是下载的是程序自己生成的数据?如果是程序自己生成的数据,那就更简单了呀~建议用java.nio来做,先生成把要传的数据写入缓冲区,再将缓冲区的数据写入通道.我还没懂你的提问是什么意思?所以没办法给你写例子,我发一段考贝文件的例子给你
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class CopyFile {
public static void main(String[] args) {
ByteBuffer bb=null;
try {
// FileOutputStream fileOut=new FileOutputStream("f:\\1.txt");
// FileInputStream fileIn=new FileInputStream("f:\\2.txt");
RandomAccessFile raf=new RandomAccessFile("f://1.txt","rw");
RandomAccessFile rafo=new RandomAccessFile("f://2.txt","rw");
//获得写入和读取通道
FileChannel foc=raf.getChannel();
FileChannel fic=rafo.getChannel();
//分配缓冲区大小
bb=ByteBuffer.allocate(1024);
//将数据读入缓冲区
foc.read(bb);
bb.put("还可以加入数据".getBytes());
//反转数据,反转以后,不能再放数据
bb.flip();
fic.write(bb);
} catch (Exception e) {
}finally{
bb.clear();
}
}
}
热心网友
时间:2022-04-26 19:34
1、把需要下载的文件转换成byte[]
2、利用ByteArrayInputStream(byte[] buf) 构造一个新的InputStream
3、org.springframework.util.FileCopyUtils.copy(java.io.InputStream inputStream, java.io.OutputStream outputStream),把这个InputStream拷贝给response.getOutputStream()
热心网友
时间:2022-04-26 21:09
//设置响应的类型,这里是图片,根据提供用户下载的文件格式确定
response.setContentType("image/jpeg");
//设置响应无缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//得到响应输出流
OutputStream os = null;
try {
os = response.getOutputStream();
}catch(Exception e) {
System.out.println("传输出错");
}
/**
*下面就是把程序生成的文件创建在这个输出流上,因为不知道
*你的文件是怎么生成的,下面是JFreeChart生成图片的例子
*/
//显示数据系列
String dataName[]=new String[]{"0-59分","60-69分","70-79分","80-89分","90分以上"};
//数据系列对应的值,从session中取出
int dataValueCount[] = (int[]) request.getSession().getAttribute("scoreRate");
if (null == dataValueCount || dataValueCount.length == 0) {
return null;
}
//创建数据集,并设置值
DefaultPieDataset pieDataset = new DefaultPieDataset();
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for(int i=0;i<dataName.length && i<dataValueCount.length;i++) {
pieDataset.setValue(dataName[i],dataValueCount[i]);
}
//图的标题
String titleString="分数分布统计图";
JFreeChart chart = ChartFactory.createPieChart(titleString,pieDataset,true,true, false);
//3D pie图
// JFreeChart chart = ChartFactory.createPieChart3D(titleString,pieDataset,true,true, false);
//生成图片
try {
ChartUtilities.writeChartAsJPEG(os,chart,500,300);//关键在这步,用输出流创建图片
os.close();
}catch(Exception e) {
System.out.println("出错");
}