SpringMVC学习笔记【part6】跨服务器文件上传

导读:本篇文章讲解 SpringMVC学习笔记【part6】跨服务器文件上传,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

SpringMVC 学习笔记 Part6

1. 服务器划分的目的

在实际开发中,我们会有很多处理不同功能的服务器。例如:

  1. 应用服务器:负责部署我们的应用。

  2. 数据库服务器:运行我们的数据库。

  3. 缓存和消息服务器:负责处理大并发访问的缓存和消息。

  4. 文件服务器:负责存储用户上传文件的服务器。
    在这里插入图片描述

分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。

2. 跨服务器文件上传

前置工作:

我们需要在文件接受服务器的 apache-tomcat-8.5.69\conf 目录下找到 web.xml,加入下列内容。加入此行的含义是:接收文件的目标服务器可以支持写入操作。

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <!-- 添加的初始化参数如下 -->
    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

第一步:导入开发需要的jar包坐标。

<!-- 文件上传相关jar包 -->
<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version> 
</dependency>
<dependency> 
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

<!-- 处理跨服文件上传的jar包 -->
<dependency>
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-core</artifactId> 
    <version>1.18.1</version> 
</dependency>
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>1.18.1</version>
</dependency>

第二步:编写文件上传的 jsp 页面。

<form action="user/myupload" method="post" enctype="multipart/form-data"> 
    选择文件:<input type="file" name="upload"/><br/> 
    <input type="submit" value="上传"/> 
</form>

第三步:创建 CommonsMultipartResolver 进 IoC 容器。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/>
</bean>

第四步:编写控制器方法的代码。

// 定义图片服务器的请求路径 
public static final String FILESERVERURL = "http://localhost:9090/myspringmvc/uploads/";

@RequestMapping("/myupload")
public String myUpload(MultipartFile upload) throws Exception { 

    // 获取到上传文件的名称 
    String filename = upload.getOriginalFilename();
    String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
    // 把文件的名称唯一化 
    filename = uuid+"_"+filename; 
    
    // 向图片服务器上传文件 
    // 创建 sun 公司提供的 jersey 包中的客户端对象
    Client client = Client.create(); 
    // 连接图片服务器 
    WebResource webResource = client.resource(FILESERVERURL+filename); 
    // 上传文件 
    webResource.put(upload.getBytes()); 
    
    return "success"; 
}

3. 常见错误解决办法

returned a response status of 400 :文件名请改成英文名。

returned a response status of 403 :上文所说的前置工作没有做好,需要在tomcat的web.xml里加入readonly=false。

returned a response status of 409 :接收服务器没有FILESERVERURL请求路径上的相关文件夹,这时我们需要打开部署的target包手动添加uploads文件夹(添加到target包里与WEB-INF、META-INF、index.jsp同级的那个目录里),在idea添加是没有用的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84488.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!