java图片上传服务器返回访问地址

2023-11-18

  • application.xml
#单个数据的大小
multipart.maxFileSize=10Mb
#总数据的大小
multipart.maxRequestSize=10Mb
#文件上传目录(window是d/e/f盘, linux是/)(注意Linux和Windows上的目录结构不同)
linux.file.uploadFolder=/

window.file.uploadFolder=E://yema//
# 设备截图文件保存路径(文件存在具体的文件夹的路径)
smas.captrue.image.path=upload/images

#浏览器访问
file.uri=/upload/
  • controller

   // 设备截图文件保存路径(文件存在具体的文件夹的路径)
    @Value("${smas.captrue.image.path}")
    private String captureImagePath;
    // 文件上传目录(window是d/e/f盘, linux是/)
    @Value("${window.file.uploadFolder}")
    private String winUploadFolder;
    // 文件上传目录(window是d/e/f盘, linux是/)
    @Value("${linux.file.uploadFolder}")
    private String linuxUploadFolder;
    // #浏览器访问
    @Value("${file.uri}")
    private String uri;


    /**
     * 保存图片
     *
     * @return ResultMsg<?>
     * @author xiaoli
     * @date 2019年9月19日下午4:04:13
     */
    @PostMapping("/savePhoto")
    public ResultMsg<?> savePhoto(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) {
        DishesInfoEntity dishesInfoEntity = new DishesInfoEntity();
        try {
            String fileName = file.getOriginalFilename(); //文件名
            // 后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 上传后图片保存的路径
            String path_deposit;
            // 判断系统
            if (FileUtils.getRootPathByOS()) {
                path_deposit = linuxUploadFolder + captureImagePath;
            } else {
                path_deposit = winUploadFolder + captureImagePath;
            }

            // 新文件名
            fileName = Commons.getUUID() + suffixName;

            FileUtils.getFileByBytes(file.getBytes(), path_deposit, fileName);
            // 文件转换为字节数组
            dishesInfoEntity.setFDishID(Integer.valueOf(request.getParameter("fDishID")));
            dishesInfoEntity.setFPicture(file.getBytes());
            dishesInfoEntity.setFPhotoCachePath(FileUtils.getServerIPPort(request) + File.separator + uri + fileName);
            //图片在浏览器访问路径
            System.out.println(FileUtils.getServerIPPort(request) + File.separator + uri + fileName);
            dishesInfoService.saveOrRefreshPicture(dishesInfoEntity);
            // 文件上传


        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtils.returnError("保存失败。。。");
        }
        return ResultUtils.returnSuccess();
    }

 

FilterUtils工具类

package com.yema.commons;


import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 	文件帮助类
 * @Author: 
 * @Date  : 2019年9月19日上午11:48:59
 */
public class FileUtils {
	
	
	/**
	 * 	复制文件并输入文件
	 * @Author: 
	 * @Date  : 2019年9月19日上午11:42:48
	 * @param :  @param filePath1 原文件
	 * @param :  @param filePath2 复制之后的文件     
	 */
	public static void copyFile(String filePath1, String filePath2) {
		try {
			// 读取本地文件
			FileInputStream in = new FileInputStream(filePath1);
			// 创建新的输出文件类
			FileOutputStream out = new FileOutputStream(filePath2);
			byte b[] = new byte[1024];
			while (in.read(b) > -1) {
				out.write(b);
			}
			in.close();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 	文件转成byte[]
	 * @Author:
	 * @Date  : 2019年9月19日上午11:37:37
	 * @param :  @param filePath
	 * @param :  @return      
	 * @return: byte[]
	 */
	public static byte[] getBytesByFile(String filePath) {
		// 创建文件类
        File file = new File(filePath);
        try {
            FileInputStream fis = new FileInputStream(file);
            // 字节输出流,其中数据被写入到字节数组中
            ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
            byte[] b = new byte[1000];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            fis.close();
            byte[] data = bos.toByteArray();
            bos.close();
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
	
	/**
	 * 	文件转成byte[]
	 * @Author: 
	 * @Date  : 2019年9月19日上午11:44:09
	 * @param :  @param file
	 * @param :  @return      
	 * @return: byte[]
	 */
	public static byte[] getBytesByFile(File file) {
        try {
            FileInputStream fis = new FileInputStream(file);
            // 字节输出流,其中数据被写入到字节数组中
            ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
            byte[] b = new byte[1000];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            fis.close();
            byte[] data = bos.toByteArray();
            bos.close();
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
	
	
	/**
	 * 	将byte数组转换成文件
	 * @Author: 
	 * @Date  : 2019年9月19日下午12:02:42
	 * @param :  @param bytes
	 * @param :  @param filePath
	 * @param :  @param fileName      
	 */
	public static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
		 // 字节缓冲输出流
		 BufferedOutputStream bos = null;
		 FileOutputStream fos = null;
		 File file = null;
		 try {
			 File dir = new File(filePath);
			 // 判断文件目录是否存在
			 if (!dir.exists() ) {
				 dir.mkdirs();
			 }
			 file = new File(filePath + "\\" + fileName);
			 fos = new FileOutputStream(file);
			 bos = new BufferedOutputStream(fos);
			 bos.write(bytes);
		 } catch (Exception e) {
			 e.printStackTrace();
		 } finally {
			 if (bos != null) {
				 try {
					 bos.close();
				 } catch (IOException e) {
					 e.printStackTrace();
				 }
			 }
			 if (fos != null) {
				 try {
					 fos.close();
				 } catch (IOException e) {
					 e.printStackTrace();
				 }
			 }
		 }
	 }
	
	/**
	 * 	把某个文件写到指定地址
	 * @Author: 
	 * @Date  : 2019年9月19日上午11:51:21
	 * @param :  @param file 文件
	 * @param :  @param filePath 写入地址
	 */
	public static void writeFile(File file, String filePath) {
		FileOutputStream outputStream;
		byte b[] = getBytesByFile(file);
		try {
			outputStream = new FileOutputStream(filePath);
			outputStream.write(b);
			outputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取网络图片流
	 * @author : 
	 * @create : 2019/11/1 11:39
	 **/
	public static InputStream getImageStream(String url) {
		try {
			HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
			connection.setReadTimeout(5000);
			connection.setConnectTimeout(5000);
			connection.setRequestMethod("GET");
			if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
				InputStream inputStream = connection.getInputStream();
				return inputStream;
			}
		} catch (IOException e) {
			System.out.println("获取网络图片出现异常,图片路径为:" + url);
			e.printStackTrace();
		}
		return null;
	}

    /**
     * 删除文件
     *
     * @param path 文件访问的路径upload开始 如: /upload/image/test.jpg
     * @return true 删除成功; false 删除失败
     */
    public static boolean delete(String path) {
        File file = new File(path);
        return file.exists() == true ? file.delete() : true;
    }

	//获取根目录
	public static Boolean getRootPathByOS(){
		String osName = System.getProperties().getProperty("os.name");
		System.out.println(osName);
		if(osName != null && osName.toLowerCase().contains("linux")){
			return true;
		}else{
			return false;
		}
	}

    /**
     * 获取服务部署根路径 http:// + ip + port
     *
     * @param request
     * @return
     */
    public static String getServerIPPort(HttpServletRequest request) {
        return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    }
}

tomcat配置文件server.xml

docBase ="图片的真实放置的路径"

path="外网访问的路径"

<!--window-->
 <Context docBase ="E:\yema\upload\images" path ="/upload" debug ="0" reloadable ="true"/>

<!--linux-->
<Context docBase ="/upload/images" path ="/upload" debug ="0" reloadable ="true"/>

页面样式 另外一篇博客:https://blog.csdn.net/qq_44045573/article/details/104967754

个人踩坑记录一下:在本地的图片上传无法访问,tomcat配置文件要配置

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java图片上传服务器返回访问地址 的相关文章

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp

随机推荐