图片上传linux服务器保存、访问路径配置及JAVA代码开发

一、图片上传linux服务器保存、访问路径配置

  我们开发图片上传功能功能时一般不考虑把图片上传到项目下的目录,否则在重新部署项目可能会因遗忘而导致图片的丢失,由此需要把图片上传放置到相应Linux目录下保存,同时为了前端可以访问,需在Tomcat中进行配置。
  
  1、配置保存目录(ps:以下是我个人路径配置,对应后面的代码,大家可自行配置自身的路径)

# cd /usr/java/
# mkdir file
# cd file
# mkdir upload

这里写图片描述

  2、Tomcat配置
  

--去到tomcat目录下的conf文件夹下
# cd /usr/java/tomcat7/conf/  

--修改server.xml文件
# vim server.xml

--在<Host>标签下添加下面的语句
<Context docBase="/usr/java/file/upload" path="/upload" debug="0" reloadable="true"/> 

修改如下图:
这里写图片描述

最后重启Tomcat服务,到此配置就做好了。

二、java web图片上传代码开发

  1、在web.xml配置上传图片的servlet  

<servlet>
    <servlet-name>uploadFile</servlet-name>
    <servlet-class>com.business.action.UploadFile</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>uploadFile</servlet-name>
    <url-pattern>/uploadFile</url-pattern>
</servlet-mapping>

这里写图片描述

  2、编写action类代码
  代码如下:
  

package com.business.action;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.business.utils.BusinessException;
import com.business.utils.NotNullObject;
import com.business.utils.ResultCode;
import com.business.utils.ResultUtils;
import com.business.utils.ServiceUtils;
import com.business.utils.UploadFileBean;
import com.google.gson.Gson;

public class UploadFile extends HttpServlet
{

    private static final long serialVersionUID = -3763233866087973330L;
    protected final Logger logger = LoggerFactory.getLogger(UploadFile.class);

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        upload(request, response);
    }

    public void upload(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        //处理中文乱码
        response.setContentType("application/json;charset=utf-8");

        try
        {
            // 开始处理上传文件逻辑
            String UploadResult = "";

            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

            // 判断请求中是否有文件上传
            if (!multipartResolver.isMultipart(request))
            {
                UploadResult = ResultUtils.responseFail(ResultCode.E0013, "文件上传失败,系统找不到文件!");
                response.getWriter().print(UploadResult);
                return;
            }

            // 解析请求,将文件信息放到迭代器里
            MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);         
            //校验参数
            Map<String, String> ParamsMap =  new HashMap<String, String>();
            ParamsMap.put("Id", multiRequest.getParameter("Id"));
            String ValidateResult = NotNullObject.isNull(ParamsMap, "Id");
            if (!ResultCode.E0000.equals(ValidateResult))
            {
                UploadResult = ValidateResult;
                response.getWriter().print(UploadResult);
                return;
            }

            //获取文件
            Iterator<String> iter = multiRequest.getFileNames();

            // 迭代文件,存放到某一路径里
            while (iter.hasNext())
            {
                // 取得上传文件
                MultipartFile file = multiRequest.getFile(iter.next());

                if (null != file)
                {
                    // 取得当前上传文件的文件名称
                    String myFileName = file.getOriginalFilename();
                    // 判断文件是否存在,文件名为空,则说明文件不存在
                    if (myFileName.trim() != "")
                    {
                        UploadResult = uploadFile(UploadResult, file, ParamsMap); 
                    }
                }
            }

            logger.info("【逻辑处理返回】" + UploadResult);
            response.getWriter().print(UploadResult);
        }
        catch (IOException e)
        {
            e.printStackTrace();
            logger.info(e.toString(), e);
        }
    }

    private String uploadFile(String UploadResult, MultipartFile file, Map<String, String> ParamsMap)
    {
        try
        {
            UploadFileBean bean = new UploadFileBean();
            if (file != null)
            {
                String FilePath = bean.Upload(file);
                //更新用户头像信息
                ParamsMap.put("ImgPath", FilePath);
                String UpdateUserResult = ServiceUtils.updateUser(ParamsMap);
                if (!ResultCode.E0000.equals(UpdateUserResult))
                {
                    UploadResult =  ResultUtils.responseFail(ResultCode.E0016,"更新用户头像信息失败!");
                }
                else
                {                   
                    Map<String, String> SingleLine = new HashMap<String, String>(2);
                    SingleLine.put("ExtName", bean.getExtName());
                    SingleLine.put("FilePath", FilePath);
                    Gson gson= new Gson();
                    UploadResult = ResultUtils.responseSuccess(gson.toJson(SingleLine));
                }
            }
            else
            {
                UploadResult = ResultUtils.responseFail(ResultCode.E0013, "文件上传失败,系统找不到文件!");
            }
        }
        catch (IOException e)
        {
            logger.info(e.toString(), e);
            UploadResult = ResultUtils.responseFail(ResultCode.E0013, "文件上传失败,系统找不到文件!");
        }
        catch (BusinessException e)
        {
            logger.info(e.toString(), e);
            UploadResult = ResultUtils.responseFail(e.getInfo().getCode() != null ? e.getInfo().getCode() : "9999", e.getInfo().getMessage() != null ? e.getInfo().getMessage() : "Failure");
        }

        return UploadResult;
    }

}

这里写图片描述

package com.business.utils;

import java.io.File;
import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;

public class UploadFileBean
{
    private final Logger log = Logger.getLogger(UploadFileBean.class);
    private String ExtName;

    public String getExtName()
    {
        return ExtName;
    }

    private void CheckFileExt(String ExtName) throws BusinessException
    {
        String UPLOAD_FILE_EXT_NAME =  "jpg";
        String[] ExtList = UPLOAD_FILE_EXT_NAME.split("\\|");
        boolean ok = false;
        if (ExtList != null && ExtList.length > 0)
        {
            for (String Ext : ExtList)
            {
                if (StringUtils.isNotEmpty(ExtName) && ExtName.toUpperCase().equals(Ext.toUpperCase()))
                {
                    ok = true;
                }
            }
        }
        if (!ok)
        {
            ExceptionInfo info = new ExceptionInfo();
            info.setCode(ResultCode.E0014);
            String Message = "上传文件格式不正确!";
            info.setMessage(Message);  
            log.error(Message); 
            throw new BusinessException(info);
        }
    }

    public String Upload(MultipartFile UploadFile) throws IOException, BusinessException
    {
        String UPLOAD_FILE_BASE_PATH = Constants.UPLOAD_FILE_BASE_PATH;
        String UPLOAD_FILE_BASE_ROOT = Constants.UPLOAD_FILE_BASE_ROOT;
        String PluploadFileName = UploadFile.getOriginalFilename();
        String[] FileList = PluploadFileName.split("\\.");
        String ExtName = FileList[FileList.length - 1];
        this.ExtName = ExtName;
        //判断上传文件后缀名是否合法
        CheckFileExt(ExtName);
        String FileName = PluploadFileName.replace("." + ExtName, "");
        String NewFileName = Md5.md5(FileName);
        String Dir = NewFileName.substring(0, 2);
        String NewFullName = NewFileName + "." + ExtName;
        log.info("【PluploadFileName】" + PluploadFileName + "【NewFullName】" + NewFullName);

        // 设置上传文件目录
        String UploadPath = UPLOAD_FILE_BASE_PATH + Dir;
        File _UploadFile = new File(UploadPath, NewFullName);
        if (!_UploadFile.isDirectory()) _UploadFile.mkdirs();
        log.info("【UploadPath】" + UploadPath);
        UploadFile.transferTo(_UploadFile); 

        return UPLOAD_FILE_BASE_ROOT + Dir + "/" + NewFullName;
    }

}

代码中包含了一些个人学习项目的业务的实现,请大家自行忽略。

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值