×

输入流上传文件

输入流上传文件(文件流上传文件)

admin admin 发表于2023-03-28 17:10:09 浏览52 评论0

抢沙发发表评论

本文目录一览:

JAVA WEB文件上传步骤

JAVA WEB文件上传步骤如下:

实现 Web 开发中的文件上传功能,两个操作:在 Web 页面添加上传输入项,在 Servlet 中读取上传文件的数据并保存在本地硬盘中。

1、Web 端上传文件。在 Web 页面中添加上传输入项:input type="file" 设置文件上传输入项时应注意:(1) 必须设置 input 输入项的 name 属性,否则浏览器将不会发送上传文件的数据。(2) 必须把 form 的 enctype 属性设为 multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在 http 请求消息体中,并使用 MIME 协议对上传文件进行描述,以方便接收方对上传数据进行解析和处理。(3) 表单提交的方式要是 post-输入流上传文件

2、服务器端获取文件。如果提交表单的类型为 multipart/form-data 时,就不能采用传统方式获取数据。因为当表单类型为 multipart/form-data 时,浏览器会将数据以 MIME 协议的形式进行描述。如果想在服务器端获取数据,那么我们必须采用获取请求消息输入流的方式来获取数据。-输入流上传文件

3、Apache-Commons-fileupload。为了方便用户处理上传数据,Apache 提供了一个用来处理表单文件上传的开源组建。使用 Commons-fileupload 需要 Commons-io 包的支持。-输入流上传文件

4、fileuplpad 组建工作流程

(1)客户端将数据封装在 request 对象中。

(2)服务器端获取到 request 对象。

(3)创建解析器工厂 DiskFileItemFactory 。

(4)创建解析器,将解析器工厂放入解析器构造函数中。之后解析器会对 request 进行解析。

(5)解析器会将每个表单项封装为各自对应的 FileItem。

(6)判断代表每个表单项的 FileItem 是否为普通表单项 isFormField,返回 true 为普通表单项。

(7)如果是普通表单项,通过 getFieldName 获取表单项名,getString 获得表单项值。

(8)如果 isFormField 返回 false 那么是用户要上传的数据,可以通过 getInputStream 获取上传文件的数据。通过getName 可以获取上传的文件名。-输入流上传文件

java后台文件上传到资源服务器上

package com.letv.dir.cloud.util;import com.letv.dir.cloud.controller.DirectorWatermarkController;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by xijunge on 2016/11/24 0024. */public class HttpRequesterFile { private static final Logger log = LoggerFactory.getLogger(HttpRequesterFile.class); private static final String TAG = "uploadFile"; private static final int TIME_OUT = 100 * 1000; // 超时时间 private static final String CHARSET = "utf-8"; // 设置编码 /** * 上传文件到服务器 * * @param file * 需要上传的文件 * @param RequestURL * 文件服务器的rul * @return 返回响应的内容 * */ public static String uploadFile(File file, String RequestURL) throws IOException {-输入流上传文件

String result = null;

String BOUNDARY = "letv"; // 边界标识 随机生成 String PREFIX = "--", LINE_END = "\r\n";

String CONTENT_TYPE = "multipart/form-data"; // 内容类型 try {

URL url = new URL(RequestURL);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setReadTimeout(TIME_OUT);

conn.setConnectTimeout(TIME_OUT);

conn.setDoInput(true); // 允许输入流 conn.setDoOutput(true); // 允许输出流 conn.setUseCaches(false); // 不允许使用缓存 conn.setRequestMethod("POST"); // 请求方式 conn.setRequestProperty("Charset", CHARSET); // 设置编码 conn.setRequestProperty("connection", "keep-alive");-输入流上传文件

conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);

java怎么实现上传文件到服务器

common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件

下面先介绍上传文件到服务器(多文件上传):

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.util.regex.*;

import org.apache.commons.fileupload.*;

public class upload extends HttpServlet {

private static final String CONTENT_TYPE = "text/html; charset=GB2312";

//Process the HTTP Post request

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {-输入流上传文件

  response.setContentType(CONTENT_TYPE);

  PrintWriter out=response.getWriter();

  try {

  DiskFileUpload fu = new DiskFileUpload();

// 设置允许用户上传文件大小,单位:字节,这里设为2m

fu.setSizeMax(2*1024*1024);

// 设置最多只允许在内存中存储的数据,单位:字节

fu.setSizeThreshold(4096);

// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

fu.setRepositoryPath("c://windows//temp");

//开始读取上传信息

List fileItems = fu.parseRequest(request);

// 依次处理每个上传的文件

 Iterator iter = fileItems.iterator();

//正则匹配,过滤路径取文件名

 String regExp=".+////(.+)$";

//过滤掉的文件类型

String[] errorType={".exe",".com",".cgi",".asp"};

 Pattern p = Pattern.compile(regExp);

   while (iter.hasNext()) {

     FileItem item = (FileItem)iter.next();

     //忽略其他不是文件域的所有表单信息

     if (!item.isFormField()) {

         String name = item.getName();

         long size = item.getSize();

         if((name==null||name.equals("")) size==0)

             continue;

     Matcher m = p.matcher(name);

     boolean result = m.find();

     if (result){

         for (int temp=0;tempERRORTYPE.LENGTH;TEMP++){

         if (m.group(1).endsWith(errorType[temp])){

               throw new IOException(name+": wrong type");

         }

         }

         try{

//保存上传的文件到指定的目录

//在下文中上传文件至数据库时,将对这里改写

         item.write(new File("d://" + m.group(1)));

out.print(name+"  "+size+"");

         }

         catch(Exception e){

           out.println(e);

         }

}

     else

     {

       throw new IOException("fail to upload");

     }

     }

 }

}

catch (IOException e){

 out.println(e);

}

catch (FileUploadException e){

    out.println(e);

}

}

}

现在介绍上传文件到服务器,下面只写出相关代码:

以sql2000为例,表结构如下:

字段名:name    filecode

类型: varchar     image

数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");

代码如下:

。。。。。。

try{

      这段代码如果不去掉,将一同写入到服务器中

      //item.write(new File("d://" + m.group(1)));

         

      int byteread=0;

      //读取输入流,也就是上传的文件内容

      InputStream inStream=item.getInputStream();            

pstmt.setString(1,m.group(1));

      pstmt.setBinaryStream(2,inStream,(int)size);

      pstmt.executeUpdate();

      inStream.close();

out.println(name+"  "+size+" ");

      }

。。。。。。

这样就实现了上传文件至数据库

如何获取上传文件的输入流

我告诉你,什么都不用就可以实现基于WEB上传文件

只要提交表单时候声明支持

FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST

File to process: INPUT NAME="userfile1" TYPE="file"

INPUT TYPE="submit" VALUE="Send File"

/FORM

然后从HTTP协议的Request中读取即可

用Java和上传文件到数据库 上传时只用到了输入流 为啥下载时用到了输入流和输出流

代码如下:importjava.io.*;/***复制文件夹或文件夹*/publicclassCopyDirectory{//源文件夹staticStringurl1="f:/photos";//目标文件夹staticStringurl2="d:/tempPhotos";publicstaticvoidmain(Stringargs[])throwsIOException{//创建目标文件夹(newFile(url2)).mkdirs();//获取源文件夹当前下的文件或目录File[]file=(newFile(url1)).listFiles();for(inti=0;i-输入流上传文件