-
java的上传有几种方式_java webapp 几种文件上传和下载方式
2021-03-09 05:15:02java webapp 几种文件上传和下载方式下载方式:第一种:a>1测试pc端chorme,safari,ie11,edge,可用,,移动端,,ios可直接开打pdf,word等文件,android上只有qq浏览器可直接查看,其他均要下载.第二种:springmvc实现@...java webapp 几种文件上传和下载方式
下载方式:
第一种:
1
测试pc端chorme,safari,ie11,edge,可用,,移动端,,ios可直接开打pdf,word等文件,android上只有qq浏览器可直接查看,其他均要下载.
第二种:
springmvc实现
@RequestMapping("/download")
public String download(@RequestParam String fileName, HttpServletRequest request,
HttpServletResponse response) {
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
try {
//Content-Disposition文件名中文编码问题
String new_filename = URLEncoder.encode(fileName, "UTF8");
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
String rtn = "filename=\"" + new_filename + "\"";
String userAgent = request.getHeader("user-agent");
if (userAgent != null)
{
userAgent = userAgent.toLowerCase();
// IE浏览器,只能采用URLEncoder编码
if (userAgent.indexOf("msie") != -1)
{
rtn = "filename=\"" + new_filename + "\"";
}
// Opera浏览器只能采用filename*
else if (userAgent.indexOf("opera") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
// Safari浏览器,只能采用ISO编码的中文输出
else if (userAgent.indexOf("safari") != -1 )
{
rtn = "filename=\"" + new String(fileName.getBytes("UTF-8"),"ISO8859-1") + "\"";
}
// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
else if (userAgent.indexOf("applewebkit") != -1 )
{
new_filename = MimeUtility.encodeText(fileName, "UTF8", "B");
rtn = "filename=\"" + new_filename + "\"";
}
// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
else if (userAgent.indexOf("mozilla") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
}
response.setHeader("Content-Disposition", "attachment;"+rtn);
String path = request.getSession().getServletContext().getRealPath("/") + "upload/inform/" ;
System.out.println(fileName);
InputStream inputStream = new FileInputStream(new File(path
+ File.separator + fileName));
OutputStream os = response.getOutputStream();
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// 这里主要关闭。
os.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
// 返回值要注意,要不然就出现下面这句错误!
//java+getOutputStream() has already been called for this response
return null;
}
html代码
但是这种方法在ios浏览器不能直接打开pdf,word等文件,需要下载,andoird上,各浏览器也不行.
3,第三种
我觉得这种最好,需要浏览器支持
上传方式
springmvc MultipartFile方式.
java代码
@RequestMapping(value="/fileUpload",method= RequestMethod.POST)
public String fileUpload(HttpServletRequest request,@RequestParam("file") MultipartFile file,@ModelAttribute Inform inform) throws IOException {
try {
int id = service.insertInform(inform);
if (!file.isEmpty()) {
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/inform/"
+file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
}
} catch (Exception e) {
e.printStackTrace();
return "uploadErro";
}
// 重定向
return "uploadSuccess";
}
*这里的文件作为附件功能上传
html代码*
method="post" id="form_2" action="do" />" data-ajax="false" enctype="multipart/form-data">
class="ui-field-contain">
for="ititle">标题:
type="text" name="title" id="ititle" value="" class="input">
type="text" name="content" id="content" value="" class="input" style="display: none">
type="text" name="author" id="author" value="${name}" style="display: none;">
type="text" name="publiccompany" id="publiccompany" value="${company}" style="display: none;">
type="datetime" name="datetime" id="datetime" value="" style="display: none;" class="input">
type="text" name="checktype" id="checktype" value="未审核" style="display: none;">
for="file">文件:
type="file" name="file" id="file" value="">
"text-align: center;width: 100%">
type="button" value="提交" style="text-align: center" id="submit_button" οnclick="toSubmit()">
可与model一起上传..
这是目前最简单的方法了,还有其他方法我看都比较复杂,写下这个记录,
-
前端下载的几种方式
2020-03-11 18:00:00对于前端的下载方式有多种,每一种都有自己不同的优略势,下面就一个一个写出对应的优缺点 a便签 a标签是最常见,也最简单的处理方式 <a href="example.jpg" download>点击下载</a> 优点 能解决不能...对于前端的下载方式有多种,每一种都有自己不同的优略势,下面就一个一个写出对应的优缺点
a便签
a标签是最常见,也最简单的处理方式
<a href="xxx.jpg" download>点击下载</a>
优点
能解决不能直接下载浏览器可浏览的文件
缺点
必须知道下载文件地址
不能跨域下载
有兼容性问题,特别是IE
不能进行鉴权Blod对象
blod是我第二个经常用的下载方式,将请求的二进制数据转化为blod对象,利用URL.createObjectUrl生成地址,再赋值给a标签
const xhr=new XMLHttpRequest(); xhr.open('get',xxxxx)//xxx为下载地址 xhr.responseType='blob'; xhr.send(); xhr.onreadystatechange=function(){ if(this.readyState===4&&this.status===200){ const url=URl.createObjectURL(xhr.response); const a=document.createElement('a'); a.style.display='none'; a.href=url; a.download='下载名称' document.body.appendChild(a); a.click(); document.body.removeChild(a); } }
优点
解决跨域问题
可以设置header缺点
兼容不太友好(IE,safari)
from表单提交
from是以前经常使用的传统方式,兼容性也好
const from=document.createElemt('form'); from.action='xxx'//链接地址 from.method='get'//请求方式 from.style.display='none'; const input=document.createElement('input'); input.name='参数字段名' input.value='参数值' from.appendChild(input); document.body.appendChild(from); from.submit();//开始请求 document.body.removeChild(from);//请求完毕后清除from
优点
传统方式,兼容性好
缺点
不知道下载进度
不知道下载的什么东西 -
jquery有几十种风格和过渡方式的焦点图代码下载.zip
2019-07-05 00:46:16jquery有几十种风格和过渡方式的焦点图代码下载 -
c#下载文件的几种方式
2016-05-29 21:48:28C#实现文件下载的几种方式 先把有问题的代码贴出来吧, using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using ...C#实现文件下载的几种方式
先把有问题的代码贴出来吧,
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;namespace infoPlatClient.NetDisk
{
public partial class downLoad : Com.DRPENG.Common.WebStruct.BaseForm
{/// <summary>
/// 取得要下载文件的路径
/// </summary>
private string fileRpath
{
get
{
return Request["fileRpath"] == null ? "" : Request["fileRpath"];
}
}
/// <summary>
/// 取得要下载文件的名称
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
this.DownloadFile();
}
public void DownloadFile()
{Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.Buffer =true;
Response.AddHeader("Accept-Language", "zh-tw");
string name = System.IO.Path.GetFileName(fileRpath);
System.IO.FileStream files = new FileStream(fileRpath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] byteFile=null;
if (files.Length == 0)
{
byteFile=new byte[1];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, 0, (int)byteFile.Length);
files.Close();
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
Response.ContentType = "application/octet-stream;charset=gbk";
Response.BinaryWrite(byteFile);
Response.End();
}
}
}之前一直用这种下载方式,可是有一次用户上传了一个700Mb的文件时报内存溢出的问题,分析了一下原因,用户的内存只有256M,而下载文件时要创建内存流,导致了内存溢出。
解决方案:1>WriteFile分块下载,就是每次下载指定数量的多件;
2>通过超链接的方式;
lblDownLoad.Text = "<a href='" + drv["VPath"].ToString() + "'>下载</a>"
下面是四种实现文件下载的方式:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//TransmitFile实现下载
protected void Button1_Click(object sender, EventArgs e)
{
/*
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
代码如下:
*/
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath("DownLoad/z.zip");
Response.TransmitFile(filename);
}
//WriteFile实现下载
protected void Button2_Click(object sender, EventArgs e)
{
/*
using System.IO;
*/
string fileName ="asd.txt";//客户端保存的文件名
string filePath=Server.MapPath("DownLoad/aaa.txt");//路径
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
//流方式下载
protected void Button4_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
} -
C#实现文件下载的几种方式
2012-12-15 00:59:39C#实现文件下载的几种方式 先把有问题的代码贴出来吧, using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using...C#实现文件下载的几种方式
先把有问题的代码贴出来吧,
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;namespace infoPlatClient.NetDisk
{
public partial class downLoad : Com.DRPENG.Common.WebStruct.BaseForm
{/// <summary>
/// 取得要下载文件的路径
/// </summary>
private string fileRpath
{
get
{
return Request["fileRpath"] == null ? "" : Request["fileRpath"];
}
}
/// <summary>
/// 取得要下载文件的名称
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
this.DownloadFile();
}
public void DownloadFile()
{Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.Buffer =true;
Response.AddHeader("Accept-Language", "zh-tw");
string name = System.IO.Path.GetFileName(fileRpath);
System.IO.FileStream files = new FileStream(fileRpath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] byteFile=null;
if (files.Length == 0)
{
byteFile=new byte[1];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, 0, (int)byteFile.Length);
files.Close();
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
Response.ContentType = "application/octet-stream;charset=gbk";
Response.BinaryWrite(byteFile);
Response.End();
}
}
}之前一直用这种下载方式,可是有一次用户上传了一个700Mb的文件时报内存溢出的问题,分析了一下原因,用户的内存只有256M,而下载文件时要创建内存流,导致了内存溢出。
解决方案:1>WriteFile分块下载,就是每次下载指定数量的多件;
2>通过超链接的方式;
lblDownLoad.Text = "<a href='" + drv["VPath"].ToString() + "'>下载</a>"
下面是四种实现文件下载的方式:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//TransmitFile实现下载
protected void Button1_Click(object sender, EventArgs e)
{
/*
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
代码如下:
*/
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath("DownLoad/z.zip");
Response.TransmitFile(filename);
}
//WriteFile实现下载
protected void Button2_Click(object sender, EventArgs e)
{
/*
using System.IO;
*/
string fileName ="asd.txt";//客户端保存的文件名
string filePath=Server.MapPath("DownLoad/aaa.txt");//路径
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
//流方式下载
protected void Button4_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
}
该文章经过本人整理所得,欢迎转载,转载时请加上本文地址;本文基于署名 2.5 中国大陆许可协议发布,请勿演绎或用于商业目的,但是必须保留本文的署名张志涛(包含链接如您有任何疑问或者授权方面的协商,请给我留言。 -
点击下载的几种方式(转)
2019-08-06 14:03:17只转了前面几种比较常用的方法,想看全部的请前往原网址查看 在实现点击下载文件有多种方法: 后端设置header信息 通过后端告诉浏览器header信息实现下载: header('Content-type: image/jpeg'); header(... -
Java文件下载的几种方式
2011-03-25 16:01:00Java文件下载的几种方式 ----------------大文件可能有问题 public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径... -
Android -- WebView 支持文件下载的几种方式
2020-12-21 15:40:00Webview 实现下载的方式主要有三种: 跳转到浏览器下载 使用系统的下载服务 自定义下载 本人能想到的只有三种,如有遗漏,还请赐教~~ 记得添加 网络权限&文件读取权限,此处忽略不计,不懂请自行百度 2. ... -
jQuery的下载及onload事件的几种方式
2019-04-13 10:20:11(二)onload事件的几种方式(普通方式,jQuery方式) 新建web项目,导入jQuery进js文件夹 比如现在我们要实现如下功能:弹出“helloworld”对话框,普通的方式有以下几种 第一种方式: <!DOCT... -
实现HTTP下载的几种方式
2005-06-20 16:51:00我们在Internet上浏览网页时,经常会下载需要的文件,有些是FTP方式的下载,多数则是基于HTTP协议的文件下载,实质...HTTP下载从技术上来说有两种实现方式,1. 直接链接到需要下载的文件蔡依林 - 城堡这种方式使用简单 -
几种OSM数据下载方式的详细介绍
2021-01-03 19:57:41本篇文章主要介绍以下几种数据下载方式,如果有介绍不清楚或漏掉的欢迎大家留言评论指出。 1. OSM官网下载 打开OSM官网,可以通过【导出】功能进行任意区域的数据下载,但是这种下载方式还是比较粗糙的,它不能按照... -
云部署方式有几种?_springboot+activiti流程定义部署有几种方式
2021-01-27 20:26:51流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被...如果无法获取可以给我留言,我会第一时间给你发gitee下载链接。一、流程资源 流程定义文件:扩展名为bpmn20.xml和bpmn; 流程定义的图片:用BPM... -
第七章 ESP32程序下载的几种方式
2018-12-29 09:59:58ESP32开发指南QQ群:824870185,内有pdf版,排版整洁。 方法一:官方工具 工具可从官方网站下载,此方法适合量产。 烧录文件目录,在工程文件夹下: build\bootloader\bootloader.bin 0x01000 build\partitions... -
stm32的几种下载程序的方式
2020-02-05 18:54:09stm32的下载方式我目前接触最多的有三种,用串口ISP烧录hex文件,用仿真器一键烧录,还有那种小白式的bootlaoder固件升级烧录 用转串口模块烧录hex文件 首先要下载一个软件,然后怎么下载嘞我不想说,因为这种方式用... -
mysql数据库备份方法有几种_MySQL数据库备份的几种方式
2021-01-19 05:18:17限时干货下载:回复【7】免费获取【完整数据分析资料!(包括SPSS、SAS、SQL、EXCEL、Project)!...所以今天分享一下MySQL数据库的备份的几种方式。1.使用命令行的方式命令行的方式较为快捷,只需要在命令行... -
asp.net文件下载的几种方式
2011-03-07 18:00:55... 阅:经验证,//使用WriteFile下载文件 这个方法,是可以用的;...asp.net2.0以后,我们有了很多种文件下载的选择。 public partial class FileDownLoad : System.Web.UI.Page { ... -
python安装好后有几种打开方式_讲几种Python包的安装方式
2021-02-03 22:47:08总第132篇/张俊红我们知道Python之所以很流行,有一个很重要的原因是因为它有很多包可以供我们使用,但是这些包很多都不是自带的,需要手动去安装,本篇我们就讲一下安装Python包的几种方式。1.前言我们平常用到的包... -
Android 使用Glide下载图片的几种方式
2018-04-19 18:03:02首先介绍几篇不错的文章,很多简介就不说了,可以去看一下这几篇文正,写的很详细,我也是在做项目的过程中的学习这几篇文章,不过运用的场景可能不太相同,所以我把我的场景写了下来。 Glide是Google官方推荐的... -
JS 下载文件的 几种不同方式
2020-07-20 10:21:28方法一 ...有个弊端 浏览器 的安全策略 有可能会被blocked。 window.open('url','_blank'); 方法三 针对后端返回的是文件流 ,下载到前端 需要保存到本地的 代码中的object 用于创建 URL 的.. -
android file transfer下载_.NET大文件下载几种方式、支持速度限制、资源占用小
2020-11-30 09:19:42(给DotNet加星标,提升.Net技能)转自:学习中的苦与乐cnblogs.com/xiongze520/p/10417472.html上一篇《.NET基于WebUploader大文件分片上传、断网续传、秒传》我们说到大文件的分片下载、...,有的博友就想看分片下载... -
前端调用后端接口下载excel文件的几种方式
2018-08-17 18:35:48今天有一个导出相应数据为excel表的需求。后端的接口返回一个数据流,...下面列觉两种我测试成功的方式: 1.window.location.href = ‘接口地址’ 含义:当前页面打开URL页面. 和在浏览器输入接口地址一样,可以... -
个人小结:python包的几种下载方式
2019-08-15 18:48:33(总结一下这些方式,在包下载不顺利时,多换几种方式) 1.在cmd窗口下使用命令直接下载 切换路径到pip所在位置,然后输入指令下载。 (关于程序下载慢的问题,可以切换下载路径到国内镜像资源网站,或者直接用...