Servlet本地测试与远程部署

本例子用的服务器是阿里云多语言环境镜像
upload.html代码

<form action="****.*" method="post" enctype="multipart/form-data">
    <input type="file" name="mFile"/>
    <input type="submit" value="提交">
</form>

接着传输文件后servlet代码

private void savefile(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");
        DiskFileItemFactory factory = new DiskFileItemFactory();// 获得磁盘文件条目工厂
        // 获取服务器下的工程文件中image文件夹的路径
        String path = request.getSession().getServletContext().getRealPath("/") + "upload";
        response.getWriter().write(path);
        /**
         * 如果没以下两行设置的话,上传大的 文件 会占用 很多内存, 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 原理
         * 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的
         * 然后再将其真正写到 对应目录的硬盘上
         */
        factory.setRepository(new File(path));
        // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
        factory.setSizeThreshold(1024 * 1024);
        // 高水平的API文件上传处理
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            // 可以上传多个文件
            List<FileItem> list = (List<FileItem>) upload.parseRequest(request);

            for (FileItem item : list) {
                // 获取表单的属性名字
                String name = item.getFieldName();

                // 如果获取的 表单信息是普通的 文本 信息
                if (item.isFormField()) {
                    // 获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
                    String value = item.getString();

                    request.setAttribute(name, value);
                }
                // 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
                else {
                    /**
                     * 以下三步,主要获取 上传文件的名字
                     */
                    // 获取路径名
                    String value = item.getName();
                    // 索引到最后一个反斜杠
                    int start = value.lastIndexOf("/");
                    // 截取上传文件的 字符串名字,加1是去掉反斜杠
                    String filename = value.substring(start + 1);
                    // 真正写到磁盘上
                    File file = new File(path,filename);
                    item.write(file); 
                }
            }

        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

android端的文件上传代码
选择了鸿神的Okhttp封装的代码(后期改为rxjava+retrofit(原生,先熟悉),当然,鸿神大大的也是杠杠的)

OkHttpUtils.post().addFile("img",“demo.jpg",new -File(uri)).url(url).build().execute();

addFile(key,filename,file)第一个参数是类似于上文html代码里
<input>里面的name属性,filename就是文件名,file就是文件。

But,问题来了
当我本地测试通过的时候(未使用app),部署到服务器时,服务器没有任何反应,没有报错,没有网页错误,查看存入文件的文件夹也没有上传的图片。
然后在代码里面添加了response.getWriter().writ()方法打印页面每一行代码放入了1.2.3.4顺序下来。
发现问题
每当服务器试图向数据盘中写入数据的时候顺序就断了
由此判断,服务器拒绝写入数据。
exm
那我是这么上传代码的?简直是interesting
查询镜像文档后发现改虚拟机(可以创建虚拟机,详情点击查看
后来根据文档改了权限 设定

chown -R www.www ./*

一切over,看到我的1.2.3.4 出来后 整个人都激动了。
好了,整理完了。
emmmmmm
确实没了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值