源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 453|回复: 33

[JSP编程] servlet+JSP+mysql实现文件上传的方法

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2015-11-11 16:18:06 | 显示全部楼层 |阅读模式
这篇文章主要介绍了servlet+JSP+mysql实现文件上传的方法,涉及JSP文件传输与判断及数据库操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了servlet+JSP+mysql实现文件上传的方法。分享给大家供大家参考,具体如下:

一、文件上传的基本操作:

1、 表单属性enctype的设置

multipart/form-data和application/x-www-form-urlencoded的区别

FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。

然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。

实现过程:

package cn.csdn.web.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import cn.csdn.web.c3p0.DBManager_c3p0;
public class Upload2Servlet extends HttpServlet {
/**
* 
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
try {
//实例化一个文件工厂 
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(new File("C:\\osp"));
String paramName=null;
String paramValue=null;
//配置上传组件ServletFileUpload 
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setFileSizeMax(1024*1024);
//从request得到所有上传域的列表 
List<FileItem> list=upload.parseRequest(request);
for(FileItem item:list){
//如果是上传域的文件域 
if(item.isFormField()){
//表单普通输入项
paramName = item.getFieldName(); //上传于的Name
// String paramValue=item.getString();
// paramValue=new String(paramValue.getBytes("iso8859-1"),"UTF-8");
paramValue=item.getString("UTF-8");
System.out.println(paramName+"="+paramValue);
}else{
//上传文件处理
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1); //截取扩展名 
System.out.println("name="+fileName);
if(!fileName.equals("")){
// fileName=refactorFileName(fileName);
InputStream in=item.getInputStream();
File file = new File("c:\\"+fileName);
FileOutputStream os=new FileOutputStream(file);
byte[] buf = new byte[1024];
int len=0;
while((len=in.read(buf))>0){
os.write(buf,0,len);
}
os.flush();
os.close();
in.close();
item.delete();
request.setAttribute("message", "文件上传成功");
try {
DataSource ds = DBManager_c3p0.getDataSource();
QueryRunner runner = new QueryRunner(ds);
String sql = "insert into user(name,file) values(?,?)";
Object[] params = {paramValue,fileName};
runner.update(sql, params);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} catch(FileSizeLimitExceededException e1){
e1.printStackTrace();
request.setAttribute("message", "文件尺寸太大");
}catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("message", "文件上传失败");
}
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
// public String refactorFileName(String fileName){
// return UUID.randomUUID().toString()+"_"+fileName;
// }
}

二、上传文件要注意的有:

注意编码问题 防止出现中文乱码 上边列举出一种
其他的还有临时文件解决问题 临时文件删除问题
解决没有指定文件名的问题
判断获取的文件名是否为空
保存路径问题
如表示url资源时应该用斜杠 “/”
如表示硬盘路径时用斜杠“\\”
为保证服务器安全,上传的文件应禁止用户直接访问,通常保存在应用程序的WEB-INF目录下,或者不受WEB服务器管理的目录

希望本文所述对大家jsp程序设计有所帮助。

回复

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-12-2 19:35:24 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-1-31 15:53:13 | 显示全部楼层
女生看了弄丢了卡萨诺的卡洛斯
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-7-6 00:39:13 | 显示全部楼层
额头额定法国队是范德萨
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-8-24 21:25:41 | 显示全部楼层
哦哦哦ijhhsdj
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2024-3-13 07:10:41 | 显示全部楼层
管灌灌灌灌灌灌灌灌灌灌
回复 支持 反对

使用道具 举报

14

主题

1万

回帖

75

积分

注册会员

Rank: 2

积分
75
发表于 2024-3-26 14:23:31 | 显示全部楼层
这个源码还可以
回复 支持 反对

使用道具 举报

匿名  发表于 2024-3-26 15:25:10

Психиатрическая Клиника

Подробная информация:
+7 (495) 988-44-34 https://mypsyhealth.ru/психотерапия/психология/2021/11/28/net-depressii

руководителей органов или учреждений, исполняющих наказание и иные меры уголовной ответственности, для обеспечения личной безопасности и ресоциализации граждан;
Если вы не справляетесь с тревогой из?за сложившейся ситуации, стоит обратиться к психологу https://mypsyhealth.ru/blog/page17/
  Но мы понимаем, что такая возможность есть не всегда https://mypsyhealth.ru/психотерапия/2019/03/21/sindrom-hronicheskoj-ustalosti
  Вот девять организаций, которые оказывают психологическую помощь бесплатно https://mypsyhealth.ru/blog/page36/

Юго-Западный административный округ https://mypsyhealth.ru/shop/substances/vitex-agnus-castus-extract

Самара, телефон неотложной психологической помощи:
回复 支持 反对

使用道具

匿名  发表于 2024-3-26 15:26:55

Водительская Справка Психиатра

nwk53kbd ·±нУЪ 2023-7-6 00:39
оН·оЁ·Ё№ъУКЗ·ВИш

Пожалуйста примите участие в нашем опросе https://mypsyhealth.ru/shop/substances/l-tryptophan

– нарушение этических норм поведения***;
14 https://mypsyhealth.ru/зож/нутрициология/2023/08/06/orzax-b-complex
  ГБУ МСППН гарантирует конфиденциальность персональных данных клиента и информации, полученной в процессе оказания психологической помощи** https://mypsyhealth.ru/services/pomoshch-psikhoterapevta

Вот некоторые из методик, которые применяют наши специалисты:
Филиал
17 https://mypsyhealth.ru/shop/categories/kostnaya-sistema
  Клиенту, опоздавшему на прием на 30 и более минут, в приеме может быть отказано или предложено использовать остаток отведенного времени для консультационного приема https://mypsyhealth.ru/team/
  Дата и время следующего приема согласовываются с ведущим клиента психологом и администратором соответствующего подразделения ГБУ МСППН https://mypsyhealth.ru/feedback/

回复 支持 反对

使用道具

匿名  发表于 2024-3-26 15:28:05

Закон Об Психиатрической Помощи


ЮАО и ЮЗАО — М https://mypsyhealth.ru/blog/page49/
А https://mypsyhealth.ru/терапия/2021/10/03/holoda-bolezni
  Жигулина , начальник Участкового отдела
Психологическая помощь Москва https://mypsyhealth.ru/shop/substances/atsidofilus

– прекращение трудовой деятельности ведущего психолога в ГБУ МСППН или его переход в другое структурное подразделение ГБУ МСППН;
051 - городского +7 (495) 051 - с мобильного +7 (499) 173-09-09 — записаться на очный прием https://mypsyhealth.ru/igumnov-sa/

У нас доступна консультация по Skype или WhatsApp https://mypsyhealth.ru/психиатрия/2022/05/02/symptoms-depression-pregnancy

(круглосуточно) https://mypsyhealth.ru/наркология/2023/08/08/how-to-treat-drug-addicts

回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-22 03:05 , Processed in 0.219776 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表