问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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("出错");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
脚崴了挂什么科、急急急 linux 解压缩工具--tar命令 生日祝福语闺蜜 简短独特暖心 QQ有哪些隐藏的图标??他们分别是什么??怎么样点亮?? QQ业务的各种图标怎么点亮? qq怎么点亮图标和名字 诗中书万象=求下联 大爱如山藏万象下联 中国电子展:电位器和可调电阻的区别是什么?这四点很明显 电位器的接线方法是什么 电位器的工作原理如何 经济模型的定义 电路模型的定义 求西方魔幻类的GALGAME,类似秽翼的尤斯蒂娅的那种,最好剧情阴暗点的 有什么感人的GALGAME OP和虚渊玄的作品谁的剧情更好啊~! 求《鬼哭街》ons游戏 刃鸣散讲的是什么故事啊? galgame鬼哭街有ntr吗 求几部人设剧情比较好的 科幻类 galgame 看半天fate zero第一季没看懂,求大神给我详细讲讲每个人物和剧情 如何评价游戏《鬼哭街》? 鬼哭街的介绍 美图手机 mtp在哪里 孩子吃芒果有什么好处呢? 什么叫cmnet上网? 这是我的战争冬天开局玩法详细介绍 对于手机来说,什麽叫上网,是不是就是聊天。 这是我的战争被炮击的学校过关攻略 这是我的战争前期攻略分享 求这是我的战争手机版45天全攻略,越详细越好,谢谢 如何去定义一个模型类 如何写好英文SCI文章 vivo Pad是否支持NFC? 新逍客杯架如何正确使用? 如何DIY纸杯挂饰方法图解 梦见别人扔了把菜刀在我胸口划了好大一条口子 梦见有人拿刀扔在我身上见血了 红酒杯的倒挂杯架,是用螺丝固定的那种,想安在壁柜下面,怎么安装呢?用什么打孔呢…… 梦见有人往我们家扔菜刀 我欠别人钱 摇摇杯怎么用 梦见有人把刀扔在枕头边要砍我 扫人脸可以找回密码这样做安全吗QQ密码忘记了 想要找回密码 确要真实身份信息 还要人脸识别 这样做 写字为什么讲究结构间架 人体红细胞进行有氧呼吸还是无氧呼吸,还是都会? 红细胞进行有氧呼吸还是无氧呼吸 人的血红细胞进行有氧呼吸还是无氧呼吸?为什么? 人红细胞所需要能量来源及呼吸作用方式分别是? 红细胞没有线粒体能呼吸吗?能产生ATP吗?是怎么产生的?【大神请赐教,抱拳 瓶装醉蟹怎么吃 什么是全封闭的快速机动车道路