SSM学习之路——springMVC第二天_跨服务器上传文件

要将某个文件,从客户端服务器传送到专门管理文件的文件服务器,由于是两个不同的服务器,就用到了跨服务器上传。

一、准备第二个项目,用于创建文件服务器

像之前创建maven项目一样,创建一个目录,代码方面没什么改动,也不用导什么依赖,单纯配一个服务器就行,注意改这两个,否则会和客户端的端口产生冲突。原本的是8080和1099。

在这里插入图片描述
配置好服务器就可以启动这个服务器了!
在这里插入图片描述

二、导入必要的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>

三、编写代码

index.jsp:

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

controller:
我们上传到这个文件服务器地址下的uploads目录。
文件服务器地址http://localhost:9090/uploadServer_war/就是复制文件服务器启动的那个地址栏即可,后面加上文件存放的目录。

@Controller
@RequestMapping("upload")
public class uploadController {

    @RequestMapping("testUploadToFileServer")
    public String testUploadToFileServer(MultipartFile upload) throws IOException {
        System.out.println("testUploadToFileServer方法执行了");
        //定义上传文件到文件服务器地址的该目录
        String path = "http://localhost:9090/uploadServer_war/uploads/";
        //生成唯一文件名
        String fileName = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-","").trim();
        fileName = uuid + "_" + fileName;
        //创建应用客户端对象
        Client client = Client.create();
        //连接图片服务器
        WebResource webResource = client.resource(path + fileName);
        //上传文件
        webResource.put(upload.getBytes());
        return "success";
    }
}

四、坑

代码是编写完了,在运行的时候出现了一些小错误
1、运行的时候可能会报409错误,这是因为我们文件服务器的地址下面没有uploads文件夹,因此我们要手动进入tomcat服务器项目路径,比如我这是
在这里插入图片描述

2、报了405这个错误:returned a response status of 405 Method Not Allowed
意思是方法不对,但是springmvc的MultipartFile要求我们必须使用post方法,这个是定死了。后来有幸看到tomcat9文件上传returned a response status of 405 Method Not Allowed这一篇博客,设置完之后直接就好了!非常感谢。
具体方法如下:
1、找到tomcat路径下,打开conf文件夹下的web.xml文件
2、使用记事本打开,查找这一项servlet配置
在这里插入图片描述
3、设置readonly为false
在这里插入图片描述

	<init-param>
	    <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>

3、如果上传的文件名出现了中文等奇怪的字符,将会报如下错误
The valid characters are defined in RFC 7230 and RFC 3986
在这里插入图片描述
就是不符合那两个规范,目前我的解决方法只是不要传有中文的文件…

发布了31 篇原创文章 · 获赞 0 · 访问量 1214

猜你喜欢

转载自blog.csdn.net/SixthMagnitude/article/details/104321716
今日推荐