`

java 上传文件代码,支持中文文件名和中文文件内容,可以同时提交多个参数

    博客分类:
  • java
阅读更多
package com.web;
  2
  3 import java.io.DataInputStream;
  4 import java.io.File;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import javax.servlet.http.HttpServletRequest;
  9 import java.io.*;
10 import java.util.HashMap;
11
12
13 public class uploadFile  {
14     public static final int MAX_SIZE = 1024 * 1024*100;
15     public static final String FILE_DIR = "d:/temp/";
16
17     private int file_Size=0;
18     private String file_Path = "";
19     private HashMap hm = new HashMap();
20
21     public String upLoad(HttpServletRequest req) {
22         String tmpString ="";
23         String result = "";
24         DataInputStream dis = null;
25         String split_Str = "";
26
27         try {
28             dis = new DataInputStream(req.getInputStream());
29             String content = req.getContentType();
30             if (content != null && content.indexOf("multipart/form-data") != -1) {
31
32                 int reqSize = req.getContentLength();
33                 byte[] data = new byte[reqSize];
34                 int bytesRead = 0;
35                 int totalBytesRead = 0;
36                 int sizeCheck = 0;
37                 while (totalBytesRead < reqSize) {
38                     // check for maximum file size violation
39                     sizeCheck = totalBytesRead + dis.available();
40                     if (sizeCheck > MAX_SIZE)
41                         result = "文件太大不能上传";
42
43                     bytesRead = dis.read(data, totalBytesRead, reqSize);
44                     totalBytesRead += bytesRead;
45                 }
46                 String dataString = null;
47                 //dataString = new String(data, "ISO-8859-1");
48                 dataString = new String(data);
49                 tmpString = new String(data);
50                 hm = parseAnotherParam(tmpString);
51               
52                 //取出字段分割符
53                 split_Str = dataString.substring(0, dataString.indexOf("\r\n"));
54                 // 分离filepath 并赋值
55                 dataString = dataString.substring(dataString.indexOf("filename=\""));
56                 String filePath = dataString.substring(0, dataString.indexOf("Content-Type:"));
57                 if (filePath==null && filePath.equals("")) return "";
58                 //System.out.println(filePath);
59                 dataString = new String(dataString.getBytes(),"ISO-8859-1");
60                 // 分离contentType 并赋值
61                 dataString = dataString.substring(dataString.indexOf("Content-Type:") + 1);
62                 dataString = dataString.substring(dataString.indexOf("\n") + 1);
63                 // 分离文件信息 获得最终想要的字节
64 //System.out.print("|"+dataString+"|");
65                 dataString = dataString.substring(2, dataString.indexOf(split_Str));
66 //System.out.println("|"+dataString+"|");
67                 dataString = dataString.substring(0, dataString.lastIndexOf("\n") - 1);
68 //System.out.print("|"+dataString+"|");
69                 if (writeFile(dataString.getBytes("ISO-8859-1"), FILE_DIR + getFileName(filePath))) {
70                     this.file_Size = dataString.getBytes("ISO-8859-1").length;
71                     this.file_Path = FILE_DIR + getFileName(filePath);
72                     result = "文件上传完毕";
73                 } else {
74                     result = "文件上传失败";
75                 }
76             } else {
77                 result = "content 必须为 multipart/form-data";
78             }
79         } catch (UnsupportedEncodingException ex4) {
80             result = "getBytes 失败 UnsupportedEncodingException错误";
81         } catch (NullPointerException e) {
82             result = "getBytes 失败 NullPointerException错误";
83         } catch (IOException ex1) {
84             result = "IOException 错误 ";
85         }
86
87         return result;
88     }
89
90     public String getFilePath(){
91         return this.file_Path;
92     }
93
94     public int getFileSize(){
95         return this.file_Size;
96     }
97
98     public boolean writeFile(byte[] data, String path) {
99         File f = null;
100         FileOutputStream fos = null;
101         try {
102             f = new File(path);
103             f.createNewFile();
104             fos = new FileOutputStream(f);
105             fos.write(data, 0, data.length);
106         } catch (FileNotFoundException e) {
107             return false;
108         } catch (IOException e) {
109             return false;
110         } finally {
111             try {
112                 fos.close();
113             } catch (IOException e) {
114                 return false;
115             }
116         }
117         return true;
118     }
119
120     public String getFileName(String arg) {
121         String path = "";
122         if (arg.indexOf("\"") > -1)
123             path = arg.substring(arg.indexOf("\"") + 1, arg.lastIndexOf("\""));
124         else
125             path = arg;
126     //System.out.println("file_path:"+arg);
127         path = path.substring(path.lastIndexOf("\\") + 1);
128         return path;
129     }
130
131
132     public HashMap parseAnotherParam(String str){
133       HashMap hm= new HashMap();
134       String key="";
135       String value="";
136       int startindex = 0;
137       int endindex = 0;
138
139       startindex = str.indexOf("Content-Dis;form-data; name=\"") + "Content-Dis;form-data; name=\"".length();
140       endindex = str.indexOf("\"\r\n\r\n");
141
142       while ( startindex >-1 && endindex > -1 ){
143         key = str.substring(startindex, endindex);
144
145         if(!str.substring(endindex , endindex + 5).equals("\"\r\n\r\n")  ){//去掉没有value的元素
146             str = str.substring(endindex);
147             startindex = str.indexOf("Content-Dis;form-data; name=\"") + "Content-Dis;form-data; name=\"".length();
148             endindex = str.indexOf("\"\r\n\r\n");
149             continue;
150         }
151         if( key.indexOf("\";") > -1){//去掉上传文件的参数以及编码
152            str = str.substring(str.indexOf("\";") + 2);
153            startindex = str.indexOf("Content-Dis;form-data; name=\"") + "Content-Dis;form-data; name=\"".length();
154            endindex = str.indexOf("\"\r\n\r\n");
155
156            continue;
157         } else
158             str = str.substring(endindex + 5);
159
160         value = str.substring(0, str.indexOf("\r\n"));
161         str = str.substring(str.indexOf("\r\n") + 2);
162         //System.out.println("key:"+key+" value:"+value);
163         hm.put(key,value);
164
165         startindex = str.indexOf("Content-Dis;form-data; name=\"") + "Content-Dis;form-data; name=\"".length();
166         endindex = str.indexOf("\"\r\n\r\n");
167
168       }
169       return hm;
170     }
171
172     public String getParameter(String param){
173         //System.out.println(hm.toString());
174       return (String)hm.get(param);
175     }
176
177
178 }
0
0
分享到:
评论

相关推荐

    java文件上传代码upload

    使用FileUpload库,可以轻松地读取上传文件的大小、类型和内容,以及处理多个文件上传的情况。 三、Java Servlet处理文件上传 1. 配置Servlet:在web.xml中配置一个Servlet来处理文件上传请求。 2. 创建Form:HTML...

    java大文件上传

    总结来说,实现Java大文件上传结合`plupload`,主要涉及前端配置`plupload`参数,后端使用`Commons-FileUpload`处理分块上传,以及安全性、续传和服务器配置等多个方面。这个名为`pluploadTest`的项目应该包含了完整...

    java多文件上传

    如果要上传多个文件,可以将参数改为`List&lt;MultipartFile&gt; files`。 接下来,我们需要处理文件存储的问题。在描述中提到,上传的文件会被保存在本地计算机的某个盘中。这需要我们编写代码来读取文件流并将其写入到...

    Java Spring文件上传,Java文件上传,Java通用文件上传

    此外,为了更好地处理文件上传,我们可以创建一个服务层,将文件上传的逻辑与控制器分离,使代码更易于维护和测试。同时,可以利用Spring的事务管理,确保文件上传操作的原子性。 总的来说,Java Spring文件上传...

    java代码文件上传

    Java代码文件上传涉及前端表单设计、后端处理逻辑及安全考虑等多个方面。通过合理配置HTML表单,利用Java后端技术(如Servlets和相关库),可以高效地实现文件上传功能,同时保证系统的安全性和稳定性。理解并掌握...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    java-多文件上传dome

    在Java编程中,多文件上传是一项常见的功能,特别是在web应用中,用户可能需要上传多个文件,如图片、文档等。本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 ...

    使用layui实现多文件列表上传

    在“使用layui实现多文件列表上传”这个项目中,主要涉及到了layui的文件上传功能,这在网页应用中是非常常见且实用的功能,尤其对于需要用户提交多份文件的场景。 首先,layui的文件上传组件是基于HTML5的File API...

    jquery 多文件上传 (java)

    标题 "jquery 多文件上传 (java)" 涉及到的是使用 jQuery 和 Java 实现一个支持多文件上传的功能。在 Web 开发中,文件上传是一个常见的需求,特别是当用户需要提交图片、文档或其他媒体文件时。jQuery 是一个流行的...

    java多图片上传、删除、预览,post提交

    - 为了处理多图片上传,服务端可能需要接收一个包含多个图片的数组或列表。可以使用`HttpServletRequest`的`getParts()`方法来获取所有上传的Part对象。 6. **部署与访问**: - 提到的`whb.jsp`可能是用于处理...

    多文件预览上传-多图片预览上传

    综上所述,"多文件预览上传-多图片预览上传"涉及了前端文件处理、预览、HTTP上传,以及JAVA后端的文件接收和存储等多个技术环节,是一个完整的文件上传解决方案。在实际应用中,还需要结合具体的业务需求和安全策略...

    java文件上传下载

    通过提供的代码示例和配置指南,开发者可以快速搭建起一个具备文件上传下载功能的应用系统。同时,为了提高用户体验和系统的安全性,还需要考虑诸如文件类型验证、上传文件大小限制等功能的实现。

    java文件上传案例2017(javaweb)

    在Java Web开发中,文件...通过这个案例,开发者可以学习如何在Java Web环境中实现文件上传功能,同时了解相关的安全和性能优化策略。实际项目中,还可以结合Spring MVC或其他Web框架进一步简化和增强文件上传的功能。

    java上传文件到服务器

    总的来说,Java上传文件到服务器涉及网络编程、多部分表单数据处理和文件管理等多个技术领域,开发者需要根据具体需求选择合适的方法和库。在实践中,确保代码的安全性和用户体验是至关重要的。

    解决java enctype multipart form-data文件上传传值问题

    它允许客户端向服务器发送多个部分的数据流,每个部分可以是不同类型的文件或文本。 #### 二、基本概念与原理 在HTTP请求中,`multipart/form-data`通过边界(boundary)来分隔不同的字段数据。例如: ```plain...

    java IO流方式上传下载文件,源代码

    通过以上讲解,我们可以理解Java IO流在文件上传下载中的核心作用,以及`uploadDRFile.jsp`和`daoRuform.jsp`这两个JSP文件可能实现的功能。在实际开发中,这些技术能够帮助我们构建稳定、高效的文件管理系统。

    几个关于java文件上传系统程序的收集

    9. **多文件上传**:现代Web应用经常需要支持一次上传多个文件。这可以通过HTML5的`multiple`属性实现,Java端则需要处理`MultipartFile[]`或`List&lt;Part&gt;`类型的参数。 10. **错误处理**:良好的错误处理机制必不可...

    文件上传例子java版本

    这种格式可以将文件内容与表单字段分开,以允许同时上传多个文件。 3. **Apache Commons FileUpload库**:Java标准库并未提供内置的多部分解析器。因此,开发者通常会使用Apache Commons FileUpload库来解析`...

    struts实现文件上传和下载源代码

    在这个"struts实现文件上传和下载源代码"项目中,我们将会探讨如何使用Struts框架来实现在Web应用中进行文件的上传和下载功能,同时还会关注对于大文件(超过3MB)的处理策略。 1. **文件上传** 文件上传是Web应用...

Global site tag (gtag.js) - Google Analytics