精华内容
下载资源
问答
  • Java上传文件到数据库

    千次阅读 2016-02-29 20:22:30
    Java上传文件到数据库  首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。  JavaWeb学习总结(五十)——文件上传和下载   http://www.cnblogs.com/xdp-gacl/p/4200090.html  本文主要...

                                                                              Java上传文件到数据库

         首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。

              JavaWeb学习总结(五十)——文件上传和下载 

              http://www.cnblogs.com/xdp-gacl/p/4200090.html

             本文主要介绍如何将文件上传到服务器,并以二进制字符流的形式存入数据库。

              初始准备,MySQL数据库,新建表test,添加字段longblob字段。

              1. 页面代码:closedLoopInfo.jsp

    <%@ page contentType="text/html; charset=utf-8" language="java"
    	import="java.sql.*" errorPage=""%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    <%
        String path = request.getContextPath();
        // 获得本项目的地址(例如: http://localhost:8080/MyApp/)赋值给basePath变量    
        String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
        // 将 "项目路径basePath" 放入pageContext中,待以后用EL表达式读出。    
        pageContext.setAttribute("basePath", basePath);
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    
    <script type="text/javascript" src="<%=basePath%>static/js/jquery.min.js"></script>
    <script src="<%=basePath%>static/js/My97DatePicker/WdatePicker.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>test</title>
    <script type="text/javascript">
       function CheckFile(obj) {
    		var filname = $(".fil").val();
    		var array = new Array('pdf', 'xlsx', 'docx', 'txt', 'pptx', 'jpg',
    				'jpeg', 'xls', 'doc'); //可以上传的文件类型
    		var fileContentType = obj.value.match(/^(.*)(\.)(.{1,8})$/)[3]; //这个文件类型正则很有用
    		var isExists = false;
    		for ( var i in array) {
    			if (fileContentType.toLowerCase() == array[i].toLowerCase()) {
    				isExists = true;
    				alert("文件类型正确");
    				return true;
    			};
    		}
    		if (isExists == false) {
    			obj.value = null;
    			alert("上传文件类型需为pdf,xlsx,docx,txt,pptx,jpg,jpeg,xls,doc!");
    			return false;
    		}
    		return false;
    	}
    </script>
    </head>
    
    <body>
    	<div class="main" style="background-color:#e4e4e4;">
    		<table class="tab">
    			<tr style="height:50px;">
    				<td></td>
    				<td style="text-align:center;vertical-align:middle;"><label
    					style="align:center;width:200%;border-style:solid;border-color:#B0B0B0;border-width:thin;">方案附件上传:</label>
    				</td>
    				<td></td>
    				<td>
    				  <form id="fieForm" method="post" enctype="multipart/form-data" action="<%=basePath%>uploadQuestionFile.do" >
        	            <div class="bmbut" id="bmbut1">
        	              <input class="fil" name="single" type="file" οnchange="CheckFile(this)"/>
                          <input class="subm" type="submit" value="上传" />
                        </div>
                      </form>
                    </td>
    				<td></td>
    				<td></td>
    			</tr>
    		</table>
    	</div>
    </body>
    </html>
           2.附件上传(uploadQuestionFile.do)

       // 获取本地第二个磁盘绝对路径,用来存取临时文件
        public String getDisk() {
    	String result = "";
    	int count = 0;
    	for (File f : File.listRoots()) {
    	    result = f.getAbsolutePath();
    	    count++;
    	    if (count == 2)
    		break;
    	}
    	return result;
        }
        
        // 附件上传
        @SuppressWarnings("rawtypes")
        @RequestMapping("uploadQuestionFile.do")
        public String uploadQuestionFile(HttpServletRequest request)
    	    throws ServletException, IOException {
    	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    	if (isMultipart) {
    	    DiskFileItemFactory factory = new DiskFileItemFactory();
    	    // factory.setSizeThreshold(1024 * 10);
    
    	    // 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
    	    // factory.setRepository(new File("f:\\test"));  // 临时文件
    
    	    // 用上面的工厂实例化上传组件,
    	    ServletFileUpload upload = new ServletFileUpload(factory);
    
    	    // 设置最大上传大小 10M
    	    upload.setSizeMax(1024 * 1024 * 5);
    	    String name = "";
    	    try {
    		List items = upload.parseRequest(request); // 得到所有FileItem
    		// 上传文件的个数
    		Iterator iter = items.iterator();
    		
    		// 循环处理所有文件
    		while (iter.hasNext()) {
    		    FileItem item = (FileItem) iter.next();
    		    System.out.println("Item:" + item);
    		    // 判断是否是表单元素(<input type="text" />单选,多选等)
    		    if (!item.isFormField()) {
    			// 得到文件的名称
    			name = item.getName();
    			// 文件长度
    			//long size = item.getSize();  // 过滤大小
    			if (name == null || "".equals(name.trim())) {
    			    // 未选择上传文件
    			    continue;
    			}
    			// 以下为文件名处理,将上传的文件保存在项目所在目录下。
    			// 获取文件名字符串的长度
    			// int end = name.length();
    			// 返回在此字符串中最右边出现的指定子字符串的索引。
    			int begin = name.lastIndexOf("\\");
    
    			// int start = name.lastIndexOf(".");
    			// 输出上传文件类型,此处可以进行类型的过滤
    			//
    			// System.out.println(application.getRealPath("/js")+System.getProperty("file.separator")+name.substring(begin
    			// + 1));
    			// File file = new File("f:\\"+name.substring(begin + 1,
    			// end));
    			
    			File file = new File("");
    			file = new File(getDisk()+ name.substring(begin + 1));
    			item.write(file);
    			System.out.println("1.name:" + name);
    			System.out.println("2.file:" + file);
    			byte[] buffer = null;
    			try {
    			    FileInputStream fis = new FileInputStream(file);
    			    ByteArrayOutputStream bos = new ByteArrayOutputStream(
    				    1024);
    			    byte[] b = new byte[1024];
    			    int n;
    			    while ((n = fis.read(b)) != -1) {
    				bos.write(b, 0, n);
    			    }
    			    fis.close();
    			    bos.close();
    			    buffer = bos.toByteArray();
    			} catch (Exception e) {
    			    e.printStackTrace();
    			}
    			FileRequest filerequest = new FileRequest();
    			filerequest.setBytes(buffer);
    			filerequest.setFileName(name);
    			filerequest.setAppName("apiplatform");
    			System.out.println("3.赋值前参数filerequest:" + filerequest);
    			System.out.println("4.参数filerequestbuffer:" + buffer);
    			System.out.println("5.参数BufferSize:" + buffer.length);
    			System.out.println("6.参数filerequestFileName:" + name);
    			System.out.println("7.已赋值Bytes:"+ filerequest.getBytes());
    			System.out.println("8.已赋值FileName:"+ filerequest.getFileName());
    			System.out.println("9.已赋值AppName:"+ filerequest.getAppName());
    			System.out.println("最终参数filerequest:" + filerequest);
    			
    			fileBuffer = buffer;
    			
    			// 是否调用成功
    			// 返回的信息,如果成功返回success,如果失败返回错误信息
    			// 文件上传成功,会返回一个文件的唯一标识
    			// 格式类似于:group1;M00/00/00/CooWNFYJ6kaAWxe_ACrCAeZ2krc847.zip
    			// 将这个结果保存到自己的数据库或其他地方,在以后查找文件时用
    			if (file.getPath().endsWith(".xlsx")) {
    			    System.out.println("文件类型为xlsx");
    			} else if (file.getPath().endsWith(".doc")) {
    			    System.out.println("文件类型为doc");
    			} else if (file.getPath().endsWith(".pdf")) {
                                System.out.println("文件类型为pdf");
    			} else if (file.getPath().endsWith(".txt")) {
    			    System.out.println("文件类型为txt");
    			} else if (file.getPath().endsWith(".pptx")) {
    			    System.out.println("文件类型为pptx");
    			} else if (file.getPath().endsWith(".docx")) {
    			    System.out.println("文件类型为docx");
    			} else {
    			    request.setAttribute("Error", "文件格式不正确");
    			    System.out.println("文件格式不正确");
    			}
    			file.delete();
    		    }
    		}
    
    	    } catch (FileUploadException e) {
    		e.printStackTrace();
    	    } catch (Exception e) {
    		// 处理文件写入时的异常
    		e.printStackTrace();
    	    }
    	}
    	return "closedLoopInfo";
        }
        
    展开全文
  • JAVA上传文件图片到服务器保存

    万次阅读 热门讨论 2017-04-10 11:58:57
    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的 我这是提交一个文件和类型 <div style="border: 1px solid red;"> 我是添加一张临时图片得到微信的media_...

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存!

     

    首先是页面 html的   我这是提交一个文件和类型

     

    <div style="border: 1px solid red;">
    			我是添加一张临时图片得到微信的media_id保存数据库!
    			<form action="xxxxxxxxm"
    				enctype="multipart/form-data" method="post">
    				<div style="display: none;">
    					<input type="text" value="IMAGE" name="type"/>
    				</div>
    				上传图片:<input type="file" name="file"
    					onchange="previewImage(this, 'prvid')" multiple="multiple"><br />
    				<input type="submit" value="提交" />
    			</form>
    			<div id="prvid">预览容器</div>
    		</div>                                                    


    预览图片js

     

     

    		function previewImage(file, prvid) {
    			/* file:file控件 
    			 * prvid: 图片预览容器 
    			 */
    			var tip = "Expect jpg or png or gif!"; // 设定提示信息 
    			var filters = {
    				"jpeg" : "/9j/4",
    				"gif" : "R0lGOD",
    				"png" : "iVBORw"
    			}
    			var prvbox = document.getElementById(prvid);
    			prvbox.innerHTML = "";
    			if (window.FileReader) { // html5方案 
    				for (var i = 0, f; f = file.files[i]; i++) {
    					var fr = new FileReader();
    					fr.onload = function(e) {
    						var src = e.target.result;
    						if (!validateImg(src)) {
    							alert(tip)
    						} else {
    							showPrvImg(src);
    						}
    					}
    					fr.readAsDataURL(f);
    				}
    			} else { // 降级处理
    
    				if (!/\.jpg$|\.png$|\.gif$/i.test(file.value)) {
    					alert(tip);
    				} else {
    					showPrvImg(file.value);
    				}
    			}
    
    			function validateImg(data) {
    				var pos = data.indexOf(",") + 1;
    				for ( var e in filters) {
    					if (data.indexOf(filters[e]) === pos) {
    						return e;
    					}
    				}
    				return null;
    			}
    
    			function showPrvImg(src) {
    				var img = document.createElement("img");
    				img.src = src;
    				prvbox.appendChild(img);
    			}
    		}

     

     

     

    之后就是后台得到

     

    @RequestMapping(params = "method=addCircle")
    public String addCircle(HttpServletResponse response,HttpServletRequest request) throws IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    
    
    		String path = request.getSession().getServletContext().getRealPath(
    				"/BackstageShoppingWebsite/images/addCircleimage");//保存的服务器地址
    
    
    		Map<String, String> map = Upload
    				.upload(request, 1024 * 1024 * 10, path);
    
    
    		String file= map.get("file"); // 名称
    		String image = map.get("type"); // 图像
    		String newFile = map.get("newFile");// 地址
    
    		return null;
    	}

     

     

     


    好了现在重点就是看Upload 这个类了 这个类基本是封装好了的,需要 加的东西可以自己取看看然后修改

     

     

     

    然后这个类用的是cos.jar包

    方法一:

    package com.web.weixin.bean;
    import java.io.File;
    import java.io.IOException;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    
    import com.oreilly.servlet.multipart.FilePart;
    import com.oreilly.servlet.multipart.MultipartParser;
    import com.oreilly.servlet.multipart.ParamPart;
    import com.oreilly.servlet.multipart.Part;
    
    
    public class Upload {
    
    	public static Map<String, String> upload(HttpServletRequest request,
    			int maxSize, String path) {
    		
    		//以map形式保存数据 key对应保存的是获取界面上的name名称 value保存的是获取界面上的name对应的值
    		Map<String, String> map = new HashMap<String, String>();
    		Part part = null;
    		try {
    			MultipartParser mrequest = new MultipartParser(request, maxSize);
    			mrequest.setEncoding("utf-8");
    			//遍历所有的part组
    			while ((part = mrequest.readNextPart()) != null) {
    				if (part.isFile()) {  //判断是否是文件
    
    					FilePart filepart = (FilePart) part;//转化成文件组
    
    					String fileName = filepart.getFileName();//得到文件名
    
    					if (fileName != null && fileName.length() > 0) {
    						// 取得扩展名
    						String fileExtName = fileName.substring(
    								fileName.lastIndexOf(".") + 1).toLowerCase();
    						// 只上传图片  //判断图片上传的格式是否符合 后缀名是否有效
    						if (fileExtName.equalsIgnoreCase("jpeg")
    								|| fileExtName.equalsIgnoreCase("png")||
    								fileExtName.equalsIgnoreCase("jpg")
    								|| fileExtName.equalsIgnoreCase("gif")
    								|| fileExtName.equalsIgnoreCase("ico")
    								|| fileExtName.equalsIgnoreCase("bmp")
    								|| fileExtName.equalsIgnoreCase("flv")
    								|| fileExtName.equalsIgnoreCase("mp4")
    								|| fileExtName.equalsIgnoreCase("mp3")) {
    
    							
    							/*String newFileName = new Date().getTime() + "."+ fileExtName;//重新改文件名  文件名+扩展名 */							 
    							
    							String newFileName =new Date().getTime() +fileName;//不改图片名字
    							
    							String newPath = path + "/" + newFileName; //文件处理文件上传的路径
    							File newFile = new File(newPath);
    							
    							filepart.writeTo(newFile);  //将文件真正写入到对应的文件夹中
    							
    							//filepart.getName()  得到 request 要接收的参数的名字
    							
    							map.put(filepart.getName(), newFileName);//把文件信息保存到map中
    							map.put("newFile", newFile.toString());
    						} else {
    							map.put("geshi", "geshi");
    							continue;
    						}// 说明上传的不是图片
    					} else {
     
     			     	map.put("yes","yes");
      
    						continue; // 说明没有选择上传图片
    					}
    
    				} else if (part.isParam()) {  //判断是否是参数
    					ParamPart paramPart = (ParamPart) part;
    					map.put(paramPart.getName(), paramPart.getStringValue());
    
    				}
    			}
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return map;
    	}
    
    }

     

    方法二: 这个是 别人写的 我这也写到这里 因为写的很好 我就记录一下 也方便大家使用

     

    @RequestMapping(params = "method=addCircle")
    public String addCircle(HttpServletResponse response,HttpServletRequest request) throws IOException {
            String urls =Var.webConfigMap.get("WXLinkUrl")+"/upload/pjimages";
            Map<String, Object> paramMap= Upload.doGet(request,response,urls);
    		String file= (String)map.get("file"); // 名称
    		String image = (String)map.get("type"); // 图像
    		String newFile = (String)map.get("newFile");// 地址
    		return null;
    	}

     

    package com.web.wxutils;
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadBase;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    
    import com.oreilly.servlet.multipart.FilePart;
    import com.oreilly.servlet.multipart.MultipartParser;
    import com.oreilly.servlet.multipart.ParamPart;
    import com.oreilly.servlet.multipart.Part;
    
    
    public class Upload {
        
    	/**
    	 * 上传图片
    	 * 
    	 * @param request
    	 * @param response
    	 * @param url2 文件的存放路径
    	 * @return
    	 * @throws ServletException
    	 * @throws IOException
    	 */
    	@SuppressWarnings({ "static-access", "unchecked" })
    	public static Map<String, Object> doGet(HttpServletRequest request, HttpServletResponse response, String url2)
    			throws ServletException, IOException {
    
    
    		Map<String, Object> paramMap = new HashMap<String, Object>();
    		StringBuilder image = new StringBuilder();
    		StringBuilder details_image = new StringBuilder();
    
    
    		try {
    			// 1、创建工厂类:DiskFileItemFactory
    			DiskFileItemFactory facotry = new DiskFileItemFactory();
    
    
    			// 2、创建核心解析类:ServletFileUpload
    			ServletFileUpload upload = new ServletFileUpload(facotry);
    			upload.setHeaderEncoding("UTF-8");// 解决上传的文件名乱码
    
    
    			// 3、判断用户的表单提交方式是不是multipart/form-data
    			boolean bb = upload.isMultipartContent(request);
    			if (!bb) {
    				return null;
    			}
    			// 4、是:解析request对象的正文内容List<FileItem>
    			List<FileItem> items = upload.parseRequest(request);
    			String storePath = request.getSession().getServletContext().getRealPath("/upload/pjimages");// 上传的文件的存放目录
    
    
    			for (FileItem item : items) {
    				if (item.isFormField()) {
    					// 5、判断是否是普通表单:打印看看
    					String fieldName = item.getFieldName();// 请求参数名
    					String fieldValue = item.getString("UTF-8");// 请求参数值
    					// System.out.println(fieldName + "=" + fieldValue);
    
    
    					if (fieldName.equals("old") && !fieldValue.equals("")) {
    						details_image.append(fieldValue);
    						details_image.append(",");
    					}
    					paramMap.put(fieldName, fieldValue);
    				} else {
    					// 6、上传表单:得到输入流,处理上传:保存到服务器的某个目录中,保存时的文件名是啥?
    					String fileName = item.getName();// 得到上传文件的名称 C:\Documents
    														// and
    														// Settings\shc\桌面\a.txt
    														// a.txt
    					// 解决用户没有选择文件上传的情况
    					if (fileName == null || fileName.trim().equals("")) {
    						continue;
    					}
    
    
    					fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
    
    
    					String newFileName = fileName;
    					InputStream in = item.getInputStream();
    
    
    					String name = new Date().getTime() + newFileName;
    					String savePath = storePath + "/" + name;
    					String url = url2 + "/" + name;
    					// System.out.println(item.getFieldName()+"上传的文件地址:"+savePath);
    					if (item.getFieldName().equals("image")) {
    						image.append(url);
    						image.append(",");
    					}
    					if (item.getFieldName().equals("details_image")) {
    						details_image.append(url);
    						details_image.append(",");
    					} else {
    						paramMap.put(item.getFieldName(), url);
    					}
    
    
    					OutputStream out = new FileOutputStream(savePath);
    					byte b[] = new byte[1024];
    					int len = 0;
    					while ((len = in.read(b)) != -1) {
    						out.write(b, 0, len);
    					}
    
    
    					in.close();
    					out.close();
    					item.delete();// 删除临时文件
    				}
    			}
    			if (image != null && image.length() != 0 && !"".equals(image.toString())) {
    				String images = image.toString().substring(0, image.toString().length() - 1);
    
    
    				paramMap.put("image", images);
    			}
    
    
    			if (details_image != null && details_image.length() != 0 && !"".equals(details_image.toString())) {
    				String details_images = details_image.toString().substring(0, details_image.toString().length() - 1);
    
    
    				paramMap.put("details_image", details_images);
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    			request.setAttribute("message", "上传失败");
    			request.getRequestDispatcher("/message.jsp").forward(request, response);
    		}
    		return paramMap;
    	}
    }

     

     

    cos.jar包下载  https://pan.baidu.com/s/1VUZs4ELd60Oc_BtB41BSYQ  如果还有什么问题 可以加 qq93472007

     

     

     

     

     


     

     

    展开全文
  • JAVA上传文件错误java.lang.NoSuchMethodException

    错误详情:

    java.lang.NoSuchMethodException: [Lorg.springframework.web.multipart.MultipartFile;.<init>()
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.getDeclaredConstructor(Unknown Source)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
        at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:137)
        at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)

    解决办法:在方法里加上参数注解 @RequestParam

    这个错误是在使用wangEditor配置多文件上传的时候出现的,使用单个文件上传没有这个问题。
    直接使用多文件上传一直报错,就用了单文件循环。
    代码如下:

    @RequestMapping(value="uploadFilesForWEditor",method={RequestMethod.GET,RequestMethod.POST})
        @ResponseBody
        public static Map<String,Object> uploadFilesForWEditor(@RequestParam("files")MultipartFile[] files,HttpServletRequest request,HttpServletResponse response){
            Map<String,Object> map=new HashMap<>();
            List<String> url = new ArrayList<>();
            for (int i = 0; i < files.length; i++) {
                String result=FileUploadUtils.fileUpload(files[i], request, response);
                if(result!=""){
                    url.add(result);
                }
            }
            if(url.size()>0){
                map.put("errno",0);
                map.put("msg","上传成功");
                map.put("data",url);
            }else{
                map.put("errno",1);
                map.put("msg","上传失败");
                map.put("data",url);
            }
            return map;
        }

    FileUploadUtils:

    public static String fileUpload(MultipartFile file,HttpServletRequest request,HttpServletResponse response){
            //获取图片的原名字
            String oldName=file.getOriginalFilename();
            String timeName=System.currentTimeMillis()+"_";
            String newName=timeName+oldName;    
            //获取项目的路径 在项目路径下新建文件夹
            String path= "D:/uploadFile";
            //新建 uploadFile 文件夹
            File parentPath=new File(path);
            if(!parentPath.exists()){
                parentPath.mkdirs();
            }
    
            String src="";
            try {
                file.transferTo(new File(parentPath,newName));
                File theFile=new File(parentPath+"/"+newName);
                if(theFile.exists()){
                    //拼接图片的相对路径作为URL
                    src="/"+newName;
                }else{
                    src="";
                }
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return src;
        }

    记录错误。

    展开全文
  • java上传文件到远程服务器七牛云

    千次阅读 2017-06-08 20:18:47
    如下: java上传文件到远程服务器(一)---HttpURLConnection方式java上传文件到远程服务器(二)---HttpClient方式如果说 不想自己搭建 静态资源Linux服务器的话,现在有很多免费的静态资源云服务可以使用。本文记录...



    我们在前面已经学习如何把文件上传到远程服务器中,这里的远程服务器一般是我们自己的Linux服务器。

    如下:


     java上传文件到远程服务器(一)---HttpURLConnection方式


    java上传文件到远程服务器(二)---HttpClient方式


    如果说 不想自己搭建 静态资源Linux服务器的话,现在有很多免费的静态资源云服务可以使用。


    本文记录java上传文件到远程服务器七牛云中。


    关于七牛云的介绍和注册使用读者可以自己查看官网。

    https://www.qiniu.com/


    使用七牛云作为图片等静态资源存储的话 查看 对象存储功能。


    在实现上传文件到七牛云之前需要准备三个东西。


    String accessKey = "your access key"; // 个人中心密钥管理中的AK
    String secretKey = "your secret key"; //个人中心密钥管理中的SK
    String bucket = "your bucket name"; // 对象存储空间名(如果有多个空间,自己想要上传到哪个空间则使用哪个空间名)

    如下图:






    我们在之前的文章中已经在SpringMVC基础框架的基础上应用了BootStrap的后台框架,在此基础上记录HttpURLConnection上传文件到远程服务器。

    应用bootstrap模板


    基础项目源码下载地址为:

    SpringMVC+Shiro+MongoDB+BootStrap基础框架


    我们在基础项目中已经做好了首页index的访问。
    现在就在index.jsp页面和index的路由Controller上做修改,上传文件到七牛云。



    index.jsp代码为:

    <%@ include file="./include/header.jsp"%>
            <div id="page-wrapper">
                <div id="page-inner">
    
    
                    <div class="row">
                        <div class="col-md-12">
                            <h1 class="page-header">
                                HttpURLConnection <small>HttpURLConnection</small>
                            </h1>
                        </div>
                    </div>
                    <!-- /. ROW  -->
    
         <form class="form-horizontal" name="upform" action="upload" method="post" enctype="multipart/form-data">
                        <div class="form-group">
                        <label for="sourceModule" class="col-sm-2 control-label">上传文件:</label>
                        <div class="col-sm-10">
                      <input type="file" name="filename"/><br/>  
                                                   <input type="submit" value="提交" /><br/> 
                        </div>
                    </div>
               </form>  
                    <!-- /. ROW  -->
                </div>
                <!-- /. PAGE INNER  -->
            </div>
            <!-- /. PAGE WRAPPER  -->
    
        
    
            
            
    
    
     <%@ include file="./include/footer.jsp"%>
    
    <script type="text/javascript">
        $(document).ready(function () {
       
    
        });
    
    </script>
    
    
    </body>
    
    </html>
    



    需要引入qiniuyun的jar包。


    我这里使用maven,则在pom.xml中加入:

    	<dependency>
    			<groupId>com.qiniu</groupId>
    			<artifactId>qiniu-java-sdk</artifactId>
    			<version>7.2.0</version>
    		</dependency>



    IndexController.java代码如下:

    package com.test.web.controller;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.google.gson.Gson;
    import com.qiniu.common.QiniuException;
    import com.qiniu.common.Zone;
    import com.qiniu.http.Response;
    import com.qiniu.storage.Configuration;
    import com.qiniu.storage.UploadManager;
    import com.qiniu.storage.model.DefaultPutRet;
    import com.qiniu.util.Auth;
    
    /**
     * IndexController
     * 
     * 
     */
    @Controller
    public class IndexController {
    
    
    	@RequestMapping("/")
    	public String index(Model model) throws IOException {
    
    		return "/index";
    	}
    
    	
    	 @RequestMapping("/upload")  
    	    public String upload(HttpServletRequest request) throws Exception {  
    	        // 判断enctype属性是否为multipart/form-data  
    	        boolean isMultipart = ServletFileUpload.isMultipartContent(request);  
    	        if (!isMultipart)  
    	            throw new IllegalArgumentException(  
    	                    "上传内容不是有效的multipart/form-data类型.");  
    	  
    	        // Create a factory for disk-based file items  
    	        DiskFileItemFactory factory = new DiskFileItemFactory();  
    	  
    	        // Create a new file upload handler  
    	        ServletFileUpload upload = new ServletFileUpload(factory);  
    	  
    	        // Parse the request  
    	        List<?> items = upload.parseRequest(request);  
    	  
    	        Iterator iter = items.iterator();  
    	        while (iter.hasNext()) {  
    	            FileItem item = (FileItem) iter.next();  
    	  
    	            if (item.isFormField()) {  
    	                // 如果是普通表单字段  
    	                String name = item.getFieldName();  
    	                String value = item.getString();  
    	                // ...  
    	            } else {  
    	                // 如果是文件字段  
    	                String fieldName = item.getFieldName();  
    	                String fileName = item.getName();  
    	                String contentType = item.getContentType();  
    	                boolean isInMemory = item.isInMemory();  
    	                long sizeInBytes = item.getSize();  
    	                // ...  
    	  
    	                // 上传到远程服务器  
    	                HashMap<String, FileItem> files = new HashMap<String, FileItem>();  
    	                files.put(fileName, item);  
    	                uploadToQiNiuYun(files);  
    	            }  
    	        }  
    	        return "redirect:/";  
    	    }
    
    
    	private void uploadToQiNiuYun(HashMap<String, FileItem> files) throws IOException {
    		//构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(Zone.zone2());
    		//...其他参数参考类注释
    //		华东	Zone.zone0()
    //		华北	Zone.zone1()
    //		华南	Zone.zone2()
    //		北美	Zone.zoneNa0()
    
    		UploadManager uploadManager = new UploadManager(cfg);
    		//...生成上传凭证,然后准备上传
    		String accessKey = "nPVt7d0gCZP9CdLVjw6o";//这里请替换成自己的AK
    		String secretKey = "p-GkW8RS4Y0_EffU";//这里请替换成自己的SK
    		String bucket = "shouxiang";//这里请替换成自己的bucket--空间名
    
    		//默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;
    
    		
    		 Iterator iter = files.entrySet().iterator();  
             int i=0;  
             while (iter.hasNext()) {  
                 i++;  
                 Map.Entry entry = (Map.Entry) iter.next();  
                 String fileName = (String) entry.getKey();  
                 FileItem val = (FileItem) entry.getValue();
                 InputStream inputStream=val.getInputStream();
                 ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); 
                 byte[] buff = new byte[600]; //buff用于存放循环读取的临时数据 
                 int rc = 0; 
                 while ((rc = inputStream.read(buff, 0, 100)) > 0) { 
                 swapStream.write(buff, 0, rc); 
                 } 
                 byte[] uploadBytes  = swapStream.toByteArray(); //uploadBytes 为转换之后的结果 
                 Auth auth = Auth.create(accessKey, secretKey);
    			String upToken = auth.uploadToken(bucket);
    			try {
    			    Response response = uploadManager.put(uploadBytes, key, upToken);
    			    //解析上传成功的结果
    			    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    			    System.out.println(putRet.key);
    			    System.out.println(putRet.hash);
    			} catch (QiniuException ex) {
    			    Response r = ex.response;
    			    System.err.println(r.toString());
    			    try {
    			        System.err.println(r.bodyString());
    			    } catch (QiniuException ex2) {
    			        //ignore
    			    }
    			}
             }
    		
    		
    	
    		
    	}  
    }


    上传成功后这里会输出 文件的hash名。这个hash名就是文件名。我们找到空间的外链域名,在浏览器中使用  外链域名/文件名  即可访问到图片:








    更多七牛云的java上传用法请参考SDK:

    https://developer.qiniu.com/kodo/sdk/1239/java#upload-flow




    展开全文
  • SSM下的Java上传文件

    千次阅读 2017-12-11 21:45:14
    SSM环境下的Java上传文件 通过MultipartFile类上传文件。 步骤: a.SpringMvc中加入配置 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--...
  • java 上传文件注意事项

    千次阅读 2019-07-18 18:36:10
    java 上传文件注意事项 1、文件名有特殊字符的情况,所以最好是文件名前台url编码,后台再url解码,这点在下载的时候也一样 2、文件大小一定要设置,spring boot 有默认。 3、文件名校验: 3.1、文件后缀校验 3.2、...
  • java上传文件到远程服务器(一)---HttpURLConnection方式

    万次阅读 多人点赞 2017-06-08 15:30:05
    我们在之前的文章JavaWeb静态资源分离思路中已经了解到要把文件上传到静态资源服务器有三种方式:java上传文件到ftp服务器(这个方案需要在静态资源服务器安装ftp服务)java使用HttpURLConnection上传文件到远程服务器 ...
  • java上传文件时,前台的如何把文件以二进制的方式传到后台,传到后台的二进制数据是放到服务器的内存当中吗,前台是一下将二进制数据传到后台的还是分批次传的
  • 关于java上传文件到tomcat后,重新部署项目,文件消失的解决方法
  • 基于LayUi组件java上传文件

    千次阅读 2019-01-22 16:14:25
    基于LayUi组件java上传文件 Maven导包 &lt;dependency&gt; &lt;groupId&gt;commons-fileupload&lt;/groupId&gt; &lt;artifactId&gt;commons-fileupload&lt;/artifactId&...
  • FastDFS通过java上传文件到服务器

    万次阅读 多人点赞 2018-08-10 17:39:18
    ... ... ...三、FastDFS使用流程...我们在项目中使用fastdfs+nginx+mysql实现上传附件的功能,主要原理就是将附件上传到fastdfs得到一个文件的链接路径url,我们获取到这个url将他以字符串形式保存到我们的mysql中,下...
  • java上传文件到FTP服务器

    万次阅读 2019-03-17 00:58:52
    前段时间,项目中使用到了上传文件到FTP服务器,再此略作整理,形成一个util工具,方便日后使用。 项目代码已上传至github:https://github.com/hack-feng/ftpdemo.git 点击直接前往 首先定义一个FTP服务器和上传...
  • 我们已经在上一篇文章中讲解了把文件上传到远程服务器的一种方式:java上传文件到远程服务器(一)---HttpURLConnection方式本章来尝试使用HttpClient方式上传文件到远程服务器:我们在之前的文章中已经在SpringMVC基础...
  • JAVA上传文件到FTP

    千次阅读 2019-06-24 11:25:08
    需求说明:将指定文件上传到FTP,上传成功后修改文件名。 获取文件名及路径(这里是从数据库获取,所以前面的代码就不CV了) /** * 测试上传 * @param map 从数据库获取到的文件信息 (包含文件路径FILE_...
  • java上传文件注意事项

    千次阅读 2014-04-25 16:25:27
    java上传图片时
  • Java上传文件内容

    千次阅读 2018-10-08 16:06:10
    通过字节输入流InputStream &amp;&amp; FileInputStream,将文件信息写进byte数组: 具体代码如下: // 第1步、使用File类...java.docx") ; // 声明File对象 // 第2步、通过子类实例化父类对象...
  • Java 上传文件 获取绝对路径

    万次阅读 2019-01-24 11:51:13
    说这个很基础吧,确实!但开始不知道这么搞,所以觉得难。 问题没有难易之分,理解其含义了,就简单。 我这是在为自己菜而找借口吗???...先讲一下我的一个目的,我要把 d.plist 这个上传到...获取项目上传文件绝对...
  • Java上传文件—FileUpload组件介绍

    万次阅读 2010-06-06 20:57:00
    Java上传文件—FileUpload组件介绍
  • java上传文件到linux文件下

    千次阅读 2020-07-06 10:13:46
    最近一个项目的需求是上传文件到图片服务器中,图片服务器是部署在linux上的一个tomcat容器,话不多说,直接上代码 一个工具类即可搞定: package com.supermap.sbsm.util; import com.jcraft.jsch.Channel; ...
  • java上传文件到Linux设置文件权限

    千次阅读 2019-01-23 17:01:03
    Runtime.getRuntime().exec("chmod 777 -R " + filepath);//这里的filepath写基础路径也可以
  • java上传文件到HDFS

    千次阅读 2016-11-09 19:13:59
    java上传本地文件到HDFS。 1、pom依赖 <groupId>org.apache.hadoop <artifactId>hadoop-common <version>2.6.0-cdh5.5.1 </dependency><dependency> <groupId>or
  • js,java上传文件到服务器

    千次阅读 2017-06-09 15:32:49
    页面 src="$request.contextPath/resources/js/page/optimizationJob.js"> 上传您的文件 :
  • java上传文件到共享文件夹

    千次阅读 2017-02-22 16:29:07
    今天做到一个需求 是要用Java文件上传到共享文件夹 下面是一个例子 以后备用注:用到一个jar包 jcifs-1.3.14.jar import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; ...
  • Java上传文件到MongoDB GirdFS

    千次阅读 2016-04-03 12:01:06
    OpenUploadStream方式上传文件到MongDB GirdFS,Java驱动
  • java 上传文件到Linux服务器 工具类

    万次阅读 2017-06-06 10:09:35
    最近在帮同学做一个...查找了相关的资料,利用ftpClient上传文件到服务器。在此贴一下这个助手类(网上很多)。 import org.apache.commons.lang.StringUtils; import org.apache.commons.net.ftp.FTPClient; import
  • Java上传文件到服务器返回url

    千次阅读 2019-11-13 18:41:13
    // 上传文件 @Override public String uploadFile ( MultipartFile file ) { try { return "/ba/" + saveImageReturnPath ( file ) ; } catch ( Exception e ) { e . ...
  • java上传文件到七牛云中

    千次阅读 2017-08-08 17:55:15
    一、加载七牛云SDK ... qiniu-java-sdk [7.2.0, 7.2.99] 二、java代码 package com.lei.utils; import com.qiniu.util.Auth; import java.io.IOException; import com.qiniu.comm
  • java上传文件常见几种方式

    万次阅读 2019-08-06 06:39:19
    * 多文件具体上传时间,主要是使用了MultipartHttpServletRequest和MultipartFile * * @param request * @return */ @RequestMapping(value = "/batch/upload", method = RequestMethod.POST) ...
  • Java 上传文件到ftp服务器

    万次阅读 多人点赞 2016-02-26 15:30:03
    前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件。  先介绍一下项目,本项目采用的是spring mvc +spring +mybatis ,用maven 进行项目管理。看一下项目...
  • Java上传文件common-fileupload

    千次阅读 2016-07-11 14:23:31
    jsp文件上传大多采用开源项目Commons FileUpload来简化处理,可以在http://jakarta.apache.org/commons/fileupload/下载,这个包需要Commons ...Commons FileUpload提供三种文件上传处理方式,DiskFileUpload、

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 398,160
精华内容 159,264
关键字:

java上传文件

java 订阅