java图片服务器/上传图片到服务器返回URL

2 篇文章 0 订阅
1 篇文章 0 订阅

后端代码: 

/**
     * 文件上传返回url
     */
    @ResponseBody
    @RequestMapping("/upload")
    public String uploadPicture(@RequestParam(value="file",required=false) MultipartFile file, HttpServletRequest request){
        Map<String, Object> map = new HashMap<>();
        File targetFile=null;
        String url="";//返回存储路径
        int code=1;
        System.out.println(file);
        String fileName=file.getOriginalFilename();//获取文件名加后缀
        if(fileName!=null&&fileName!=""){
            String returnUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() +"/upload/imgs/";//存储路径
            String path = request.getSession().getServletContext().getRealPath("upload/imgs"); //文件存储位置
            String fileF = fileName.substring(fileName.lastIndexOf("."), fileName.length());//文件后缀
            fileName=new Date().getTime()+"_"+new Random().nextInt(1000)+fileF;//新的文件名

            //先判断文件是否存在
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String fileAdd = sdf.format(new Date());
            //获取文件夹路径
            File file1 =new File(path+"/"+fileAdd);
            //如果文件夹不存在则创建
            if(!file1 .exists()  && !file1 .isDirectory()){
                file1 .mkdir();
            }
            //将图片存入文件夹
            targetFile = new File(file1, fileName);
            try {
                //将上传的文件写到服务器上指定的文件。
                file.transferTo(targetFile);
                url=returnUrl+fileAdd+"/"+fileName;
                map.put("url", url);
                map.put("fileName", fileName);
                return Result.toResult(ResultCode.SUCCESS, map);
            } catch (Exception e) {
                e.printStackTrace();
                return Result.toResult(ResultCode.SYSTEM_INNER_ERROR);
            }
        }
        return Result.toResult(ResultCode.SYSTEM_INNER_ERROR);
    }

注:本地需手动新建/upload/imgs文件夹

前端代码:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <label class="col-sm-2 control-label">请选择要上传的图片:</label>
        <div class="col-sm-10">
        <input type="hidden" name="img"  id="photoUrl"/>
        <input type="file" name="logoFile" id="logoFile" onchange="setImg(this);"><br>
        <span><img id="photourlShow" src="" width="500" height="500"/></span><br>
        <span><input id="show" style="width: 500px"></span>
        </div>
</body>
</html>
<script src="/jquery.min.js"></script>
<script type="text/javascript">

    function setImg(obj){
        var f=$(obj).val();
        if(f == null || f ==undefined || f == ''){
            return false;
        }
        if(!/\.(?:png|jpg|bmp|gif|PNG|JPG|BMP|GIF)$/.test(f))
        {
            alert("类型必须是图片(.png|jpg|bmp|gif|PNG|JPG|BMP|GIF)");
            $(obj).val('');
            return false;
        }
        var data = new FormData();
        console.log(data);
        $.each($(obj)[0].files,function(i,file){
            data.append('file', file);
        });
        console.log(data);
        $.ajax({
            type: "POST",
            url: "/upload",
            data: data,
            cache: false,
            contentType: false,    //不可缺
            processData: false,    //不可缺
            dataType:"json",
            success: function(ret) {
                console.log(ret);
                if(ret.code==10000){
                    $("#photoUrl").val(ret.data.url);//将地址存储好
                    $("#photourlShow").attr("src",ret.data.url);//显示图片
                    $("#show").attr("value",ret.data.url);//显示图片
                    alert(ret.msg);
                }else{
                    alertError(ret.msg);
                    $("#url").val("");
                    $(obj).val('');
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert("上传失败,请检查网络后重试");
            }
        });
    }
</script>
</html>

此时项目完成。

================================================================================================

当打包为jar包时,文件是保存在服务器中的。由于对于linux服务器来说,是不可以直接读取系统文件的。

所有在此需手动创建一个文件流来读取图片显示出来。

/**
     *author:zhaohe
     * IO流读取图片
     * @param imgUrl 图片url
     */
@RequestMapping(value = "/showImg",method = RequestMethod.GET)
public void IoReadImage(String imgUrl, HttpServletResponse response)throws IOException {
    fileService.IoReadImage(imgUrl,response);
}

private String GOODS_IMG_PATH = "/home/installPackage/imgs/";

public void IoReadImage(String imgUrl, HttpServletResponse response) throws IOException {
        ServletOutputStream out = null;
        FileInputStream ips = null;
        String upload = null;

        try {
            //获取图片存放路径
            String imgPath = GOODS_IMG_PATH + "/" + imgUrl;
            ips = new FileInputStream(new File(imgPath));
            String type = imgUrl.substring(imgUrl.indexOf(".")+1);
            if (type.equals("png")){
                response.setContentType("image/png");
            }
            if (type.equals("jpeg")){
                response.setContentType("image/jpeg");
            }
            out = response.getOutputStream();
            //读取文件流
            int len = 0;
            byte[] buffer = new byte[1024 * 10];
            while ((len = ips.read(buffer)) != -1){
                out.write(buffer,0,len);
            }
            out.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            out.close();
            ips.close();
        }
    }

 

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在使用Java上传图片服务器返回下载URL的过程中,可以按照以下步骤进行操作: 1. 首先,需要使用Java的文件操作相关类和网络编程相关类,例如可以使用java.io.File类和java.net.HttpURLConnection类。 2. 从本地计算机上选择要上传的图片文件,并利用File类创建一个File对象,指向该文件。 3. 创建一个URL对象,指向服务器URL地址,如http://www.example.com/upload.php。 4. 打开一个HttpURLConnection连接,使用该连接与服务器进行通信。 5. 设置连接的请求方法为POST,以向服务器发送数据。 6. 设置连接的参数和请求头,如设置请求头的Content-Type为multipart/form-data,并设置其他相关的请求头信息。 7. 创建一个DataOutputStream对象,通过该对象将文件数据写入连接的输出流中,实现文件的上传。 8. 通过连接的输入流获取服务器的响应数据,这里可以通过读取InputStream流将返回的数据进行读取。 9. 解析服务器返回的响应数据,可以是一个包含了上传文件的下载URL的字符串。 10. 关闭连接,释放资源。 可以使用Apache HttpClient、OkHttp等第三方库来简化网络请求操作,这些库提供了更方便的方法和接口,可以简化代码的编写和优化性能。 需要注意的是,服务器端也需要有相应的代码来接收上传的图片文件,保存到指定位置,并返回下载URL给客户端。具体的实现方式取决于服务器端的开发环境和框架。 以上是一种较为常见的实现方式,具体的实现细节和代码结构可能会有所不同,根据实际需求进行相应的调整。 ### 回答2: 在Java中实现图片上传至服务器返回下载URL的过程如下: 1. 首先,你需要使用Java的文件上传技术将本地图片上传到服务器。可以使用Apache的HttpClient库发送HTTP POST请求来实现文件上传。具体步骤如下: - 创建一个`HttpClient`对象。 - 创建一个`HttpPost`对象,并设置请求的URL。 - 创建一个`MultipartEntityBuilder`对象,用于构建包含文件和其他参数的请求实体。 - 使用`addBinaryBody`方法将要上传的图片添加到请求实体中,同时可以设置图片的MIME类型和文件名。 - 可选地,可以使用`addTextBody`方法添加其他参数。 - 将请求实体设置给`HttpPost`对象。 - 发送`HttpPost`请求,并获取响应。 2. 在服务器端,你需要根据接收到的文件,将其保存到指定位置。你可以使用Java的Io技术来实现文件的保存。 3. 保存文件后,你需要为该文件生成一个可访问的下载URL。你可以使用服务器URL和保存的文件路径拼接而成的URL作为下载URL。 注意事项: - 上传图片时,需要确保服务器端有足够的存储空间,并且对上传文件的大小进行限制,以防止过大的文件拖慢服务器性能。 - 在上传图片之前,可以在客户端对图片的大小和类型进行校验,以提前减少无效的上传操作。 - 保存文件之后,为了能够让其他人可以访问到该文件,可能需要对保存的文件进行权限设置。 - 在生成下载URL时,建议使用绝对路径而不是相对路径,以避免由于路径变动导致无法正常访问文件的问题。 以上就是用Java实现图片上传至服务器返回下载URL的基本步骤。具体的代码实现可以根据具体的开发框架和需求进行调整。 ### 回答3: 要实现在Java上传图片服务器返回下载URL的功能,可以使用如下的步骤: 1. 创建一个Java后台服务器,用于接收客户端上传的图片文件。 2. 在前端(例如HTML页面)中,使用表单来上传图片文件。 3. 在Java后台服务器上,使用Java的Servlet或Spring MVC等框架来处理文件上传请求。 4. 在Java后台服务器上,可以使用Apache Commons FileUpload或其他相应的库来处理文件上传。 5. 在Java后台服务器中,将接收到的图片文件保存到指定的服务器文件夹中。 6. 可以为每个上传的图片文件生成一个唯一的文件名,以避免重名的冲突。 7. 将保存在服务器文件夹中的图片文件的路径和文件名返回给客户端。 8. 客户端可以使用返回的路径和文件名来拼接成完整的下载URL。 9. 客户端可以通过浏览器或其他HTTP请求方式来下载这个图片。 10. 当需要下载图片时,客户端可以使用下载URL来获取服务器上的图片。 总结,要实现在Java上传图片服务器返回下载URL,需要在前后端之间进行数据的传递,并在服务器端进行相应的文件处理,最后返回文件的路径和文件名给客户端。这样客户端可以通过拼接路径和文件名来获取服务器上的图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zgsdzczh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值