Java实现图片上传到服务器

Java实现图片上传到服务器


#这几天研究图片上传到服务器并回显到页面遇到了问题,在这里总结一下!希望对各位有用!!!

先上代码

jsp代码:

<form id="myform" method="post" enctype="multipart/form-data">
                    <div class="form-group" >
                        <label for="plainGoodsName">商品名</label>
                        <input type="text" class="form-control" id="plainGoodsName" name="plainGoodsName" placeholder="请输入商品名">
                    </div>

                    <div class="form-group">
                        <label for="plainGoodsImg">商品图片</label>

                        <a style="float: left;border:1px solid #eee;width: 100%;padding: 10px;box-sizing: border-box;margin:5px 0;" href="javascript:;" class="a-upload">
                            <input type="file" name="files" id="plainGoodsImg" onchange="xmTanUploadImg_1(this,'xmTanImg_1')" accept="image/*"/>
                            <img style="width: 80px;" id="xmTanImg_1"/>
                            <div style="width: 80px;height: 80px;display: none;" id="xmTanDiv_1"></div>
                        </a>
                    </div>


                    <div class="form-group">
                        <label for="plainGoodsPrice">商品价格</label>
                        <input type="text" class="form-control" id="plainGoodsPrice" name="plainGoodsPrice" placeholder="请输入商品价格">
                    </div>

                    <div class="form-group">
                        <label for="plainGoodsNum">商品库存</label>
                        <input type="text" class="form-control" id="plainGoodsNum" name="plainGoodsNum" placeholder="商品库存">
                    </div>
                    <div class="form-group">
                        <label for="plainGoodsContext">商品描述</label>
                       <!-- <input type="text" class="form-control" id="plainGoodsContext" name="plainGoodsContext" placeholder="商品描述"> -->
                        <textarea class="form-control" id="plainGoodsContext" name="plainGoodsContext" rows="3"></textarea>
                    </div>
                    <div class="form-group">
                                 <label></label>
                             <button type="button" onclick="saveGoods()" class="btn btn-primary">添加商品</button>
                    </div>
                </form>

问题

第一、上传图片时form表单中加入 enctype=“multipart/form-data” 否则会出现问题 后台接收不到
(jsp的id接收后台传过来的值 通过标签赋值 name是向后台传值用的 如果没有name没法传值==这是给我自己写的)

js代码

 var formData = new FormData($( "#myform" )[0]);
  $.ajax({
            url:"${ctx}/back/exchangeShopping/addGoods.action",
            type:"POST",
            dataType:"json",
            data:formData,
            processData: false,// 不加会报错
            contentType: false,// 不加会报错
            success:function(data) {
                if(data == "true"){
                    layer.msg('添加成功',{icon:6,time:1500,end:function () {
                            window.location.reload();
                        }});
                }else {
                    layer.msg(data,{icon:5,time:1500});
                }
            }
        })

有几个要注意的地方:
第一、ajax要加上两个属性
processData: false,// 不加会报错
contentType: false,// 不加会报错
第二、 var formData = new FormData($( “#myform” )[0]);
使用formdata序列化表单
关于jquery的 $(“form”).serialize()和 new FormData表单序列化
网址:https://blog.csdn.net/cracklibby/article/details/80013112
$(“form”).serialize()只会序列化表单不会序列化文件

问题:带文件上传的form表单序列化 传参问题
使用formdata 序列化form表单 后台使用@RequestParam(value = “files”, required = false)MultipartFile files,wFrontPlainGoods goods 接收
并且MultipartFile 名字要与页面name的名字相同

controller页面

@ResponseBody
	    @RequestMapping("/addGoods.action")
	    public String addGoods(@RequestParam(value = "files", required = false)MultipartFile files,wFrontPlainGoods goods){
	    	String Info = this.backExchangeShoppingService.addGoods(goods,files);
	        return JSONObject.toJSONString(Info);
	    }

后台 MultipartFile 接收文件 注意 名字要与页面起的名字一样(有些文章写的是名字一定不要一样 具体问题具体分析 我是小白不确定这个是为什么)
后面的对象时接收除文件以外的其他信息!

service页面:

//定义图片存储在服务器的路径
	public static final String PICTUREURL = "D:/nginx-1.13.8/html/slitLamp/screening/";
	public static final String CONFIGUREURL = "http://10.11.23.203:8029/";
	public String uploadPictureByFile(MultipartFile file) {
		// TODO 自动生成的方法存根
		String filename1 = "picture_" + UUID.randomUUID() + ".jpg";//生成唯一图片路径
		 if (!file.isEmpty()) {  
	            try {  
	                File filepath = new File(PICTUREURL);
	                if (!filepath.exists()) 
	                    filepath.mkdirs();
	                // 文件保存路径  
	               String savePath = PICTUREURL + filename1;  
	                // 转存文件  
	                file.transferTo(new File(savePath));  
	            } catch (Exception e) {  
	                e.printStackTrace();  
	            }  
	        }  

				String url = CONFIGUREURL + filename1;
		return url;
	}

问题
第一、D:/nginx-1.13.8/html/slitLamp/screening/ 为图片存在nginx下的路径
http://10.11.23.203:8029/ 为nginx的IP+端口 通过这个可以访问启动nginx的页面
第二、配置nginx 在nginx下的conf文件夹下的nginx.conf文件中配置图片储存路径`
第三、程序的图片是下载到本地的 使用nginx挂载本地的图片 然后启动nginx服务后通过nginx的IP+端口+(有可能还要加)+图片名访问

    location ~ \.(gif|jpg|jpeg|png|bmp|swf)$              ###处理图片  
		{    
			root         D:/nginx-1.13.8/html/slitLamp/screening/;   ###对应的图片存入路径  
		}    

图片:![nginx配置图片](https://img-blog.csdnimg.cn/20190306091445409.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMTk0ODIxNTY4,size_16,color_FFFFFF,t_70)

关于nginx的问题

配置nginx的网址(Windows版 参考):
https://blog.csdn.net/y19910825/article/details/80301393
参考:
https://blog.csdn.net/qq_19244423/article/details/46877983
一台服务器挂载另一台服务器信息 参考:[Linux部署nginx挂载文件]
https://www.linuxidc.com/Linux/2013-07/87183.htm

当程序部署到服务器上时可以通过访问其他服务器来分担部署程序服务器的负载 以防止出现问题

另外发现一种方法是将图片上传到七牛云服务器上 调用他们的接口 他们给返回图片链接 直接将链接保存到本地就可以
网址参考:[七牛云]
https://www.w3cschool.cn/opensnscourse/euks1ppj.html

以上链接是从网上复制过来的 如有问题请联系本人删除!!!

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现Java表单上传图片服务器,可以使用以下步骤: 1. 创建一个HTML表单,包含一个文件输入字段和提交按钮。 ``` <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"/> <input type="submit" value="Upload"/> </form> ``` 其中,enctype="multipart/form-data" 表示提交的数据是二进制数据,可以包含文件。 2. 创建一个Servlet来处理上传请求。 ``` @WebServlet("/upload") @MultipartConfig(fileSizeThreshold=1024*1024*10, // 10 MB maxFileSize=1024*1024*50, // 50 MB maxRequestSize=1024*1024*100) // 100 MB public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传的文件 Part filePart = request.getPart("file"); String fileName = getFileName(filePart); InputStream fileContent = filePart.getInputStream(); // 将文件保存到服务器磁盘 saveFile(fileName, fileContent); } private String getFileName(final Part part) { final String partHeader = part.getHeader("content-disposition"); for (String content : partHeader.split(";")) { if (content.trim().startsWith("filename")) { return content.substring(content.indexOf('=') + 1).trim() .replace("\"", ""); } } return null; } private void saveFile(String fileName, InputStream fileContent) throws IOException { File file = new File("/path/to/save/directory/" + fileName); try (OutputStream out = new FileOutputStream(file)) { int read = 0; byte[] bytes = new byte[1024]; while ((read = fileContent.read(bytes)) != -1) { out.write(bytes, 0, read); } } } } ``` 在上面的代码中,我们使用了Servlet 3.0规范中的@MultipartConfig注解来指定上传文件的配置。maxFileSize和maxRequestSize分别指定了上传文件的最大大小和整个请求的最大大小。 3. 在saveFile方法中,我们将上传的文件保存到服务器磁盘。这里我们使用了Java IO中的FileOutputStream类来将文件写入磁盘。 通过以上步骤,就可以实现Java表单上传图片服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值