当前位置: 首页 > news >正文

四川内江网站建设一个主机可以放几个网站

四川内江网站建设,一个主机可以放几个网站,滕州网站建设培训,视频wordpress源码跨服务上传文件#xff0c;嘿嘿#xff0c;来一篇实用性高的#xff0c;本篇将主要完成在Feign中上传文件到另一个微服务中。步骤如下#xff1a; 我们需要在服务提供者和服务消费者的项目中添加相应的依赖#xff1a; 对于服务提供者的项目#xff0c;你需要添加Sprin…跨服务上传文件嘿嘿来一篇实用性高的本篇将主要完成在Feign中上传文件到另一个微服务中。步骤如下 我们需要在服务提供者和服务消费者的项目中添加相应的依赖 对于服务提供者的项目你需要添加Spring Boot的Web依赖和Spring Cloud的Feign依赖。在pom.xml文件中添加以下依赖 dependencies!-- Spring Boot Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring Cloud Feign --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency /dependencies对于服务消费者的项目除了上述的依赖外还需要添加Feign的文件上传支持依赖。在pom.xml文件中添加以下依赖 dependencies!-- Spring Boot Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring Cloud Feign --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency!-- Feign 文件上传支持 --dependencygroupIdio.github.openfeign.form/groupIdartifactIdfeign-form/artifactIdversion3.8.0/version/dependency /dependencies注意Feign的文件上传支持依赖是feign-form需要指定相应的版本号。 正式开始 在服务提供者的微服务中创建一个接收文件上传的接口。可以使用RequestParam(“file”) MultipartFile file来接收文件参数。 PostMapping(/upload) void uploadFile(RequestParam(file) MultipartFile file);在服务消费者的微服务中创建一个Feign接口并使用FeignClient注解标记它。在接口中定义上传文件的方法使用PostMapping注解并指定上传文件的路径。 FeignClient(name file-service) public interface FileServiceClient {PostMapping(/upload)void uploadFile(RequestParam(file) MultipartFile file); }在服务消费者的微服务中配置Feign的文件上传支持。在配置类中添加Configuration注解并创建一个FeignClientConfig类使用Bean注解配置Encoder和Decoder。 Configuration public class FeignClientConfig {Beanpublic Encoder feignFormEncoder() {return new SpringFormEncoder();}Beanpublic Decoder feignDecoder() {return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()));}private ObjectFactoryHttpMessageConverters feignHttpMessageConverter() {final HttpMessageConverters httpMessageConverters new HttpMessageConverters(new FormHttpMessageConverter());return () - httpMessageConverters;} } 在服务消费者的微服务中使用EnableFeignClients注解启用Feign客户端并在需要上传文件的地方注入FileServiceClient接口调用uploadFile方法即可完成文件上传。 SpringBootApplication EnableFeignClients public class ConsumerApplication {Autowiredprivate FileServiceClient fileServiceClient;public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}public void uploadFile(MultipartFile file) {fileServiceClient.uploadFile(file);} } 这样通过Feign客户端调用uploadFile方法时会将文件作为参数上传到服务提供者的微服务中。注意需要确保服务提供者和服务消费者的微服务都引入了相应的依赖并且配置正确。 在以上代码中我们已经定义了Feign客户端接口FileServiceClient并在服务消费者的代码中注入了该接口。现在我们只需要在服务消费者的代码中调用FileServiceClient的uploadFile方法即可完成文件上传。 假设我们要上传的文件是一个MultipartFile对象可以按照以下方式完成文件上传 Autowired private FileServiceClient fileServiceClient;public void uploadFile(MultipartFile file) {fileServiceClient.uploadFile(file); } 在调用uploadFile方法时Feign会将MultipartFile对象转换为multipart/form-data格式并将其作为请求体发送到服务提供者的微服务中。服务提供者的微服务会接收到文件并进行相应的处理。 需要注意的是Feign默认使用的是application/json格式进行请求和响应的序列化和反序列化。如果要使用multipart/form-data格式进行文件上传需要在服务消费者的代码中配置Feign的文件上传支持。 前端界面 在网页中实现文件上传可以使用HTML的form元素和input typefile元素来创建一个文件上传表单。然后通过JavaScript和AJAX将文件发送到服务端。 !DOCTYPE html html headtitle文件上传/title /head bodyh1文件上传/h1form iduploadForm enctypemultipart/form-datainput typefile namefile idfileInputbutton typesubmit上传/button/formdiv idmessage/divscriptdocument.getElementById(uploadForm).addEventListener(submit, function(event) {event.preventDefault(); // 阻止表单默认提交行为var fileInput document.getElementById(fileInput);var file fileInput.files[0]; // 获取选择的文件var formData new FormData();formData.append(file, file); // 将文件添加到FormData对象中var xhr new XMLHttpRequest();xhr.open(POST, /upload); // 设置请求方法和URLxhr.onload function() {if (xhr.status 200) {document.getElementById(message).textContent 文件上传成功;} else {document.getElementById(message).textContent 文件上传失败;}};xhr.send(formData); // 发送请求});/script /body /html 要通过localhost:端口号直接访问HTML页面需要在Spring Boot应用程序中添加一个控制器将HTML页面映射到一个URL路径上。 我的HTML页面名为upload.html并且位于src/main/resources/static目录下。 Controller public class UploadController {GetMapping(/)public String index() {return upload.html;} } 在上述代码中我们创建了一个名为UploadController的控制器并使用GetMapping注解将/路径映射到upload.html页面。当用户访问localhost:端口号时将自动跳转到upload.html页面。 需要注意的是为了使Spring Boot能够正确地处理静态资源你需要在application.properties文件中添加以下配置 spring.mvc.static-path-pattern/static/**这将告诉Spring Boot将所有以/static/开头的URL路径映射到src/main/resources/static目录下的静态资源。因此你需要将upload.html文件放置在src/main/resources/static目录下。 至此文件上传的大概框架就搭建好了可以去练练手了。 案例 本案例是博主在以上代码上进行的并添加了一个单元测试上传txt文件干货满满请细细品鉴光是利用上边的代码然后汇总期间碰到了许多错误才成功搭建成功本案例。 首先来看看博主的项目案例目录结构 在feign模块中搭建两个字模块一个作为服务模块一个作为消费者模块 eureka-feign-upload-server 来瞅瞅我的pom文件吧 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdfeign/artifactIdgroupIdcom.miaow/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdeureka-feign-upload-server/artifactIdnameeureka-feign-upload-server/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency !--spring-cloud-starter-netflix-eureka-client这是Eureka客户端的另一个依赖库用于将应用程序注册到Eureka服务器并从服务器中发现其他服务。它与spring-cloud-starter-eureka功能相似但是它是基于Netflix Ribbon的可以提供更多的负载均衡策略和配置选项。通过添加该依赖库你可以在应用程序中实现Eureka客户端功能并使用Netflix Ribbon进行负载均衡。--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependency!--spring-cloud-starter-eureka是Eureka客户端的依赖库用于将服务注册到Eureka服务器并从Eureka服务器发现其他服务。它包含了Eureka客户端的核心功能如服务注册、服务发现、负载均衡等。--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-eureka/artifactIdversion1.4.2.RELEASE/version/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionHoxton.SR8/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project 配置好pom文件引入相关依赖之后我们在Application.yml文件中配置我们的相关属性 server:port: 3401spring:application:name: eureka-feign-upload-server# eureka客户端注册到Eureka注册中心切记需要启动eureka服务 eureka:client:service-url:defaultZone: http://localhost:1000/eureka#ribbon: # eureka: # enabled: true之后创建一个FileController类 RestController public class FileController {PostMapping(/upload)public String uploadFile(RequestParam(file) MultipartFile file) {return 文件上传成功;} }启动类 EnableDiscoveryClient EnableFeignClients SpringBootApplication public class EurekaUploadServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaUploadServerApplication.class);} }PS:实际上这里没啥好讲的按照我的配置方式进行把它当做服务器就行了。 eureka-feign-upload-client 声明这个模块看起来简单但是配置稍有问题就会出现错误或者服务器找不到以下是博主使用的并成功实现的可以参照一下但还是推荐你自己玩碰到不会的可以与我对一下我在写本篇博文最先时候的时候就是对照demo来的一个一个调试最后成功(鬼知道我踩了多少坑)。 目录结构如上 pom.xml文件配置 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdfeign/artifactIdgroupIdcom.miaow/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdeureka-feign-upload-client/artifactIdnameeureka-feign-upload-client/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-eureka/artifactIdversion1.4.2.RELEASE/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependencydependencygroupIdio.github.openfeign.form/groupIdartifactIdfeign-form/artifactIdversion3.8.0/version/dependencydependencygroupIdio.github.openfeign.form/groupIdartifactIdfeign-form-spring/artifactIdversion3.8.0/version/dependencydependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.4/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionHoxton.SR8/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project application.yml文件配置 server:port: 3402spring:application:name: eureka-feign-upload-clientmvc:static-path-pattern: /static/**# 文件上传限制大小servlet:multipart:enabled: truemax-file-size: 10MBmax-request-size: 10MB# eureka客户端注册到Eureka注册中心切记需要启动eureka服务 eureka:client:service-url:defaultZone: http://localhost:1000/eureka 只要upload.html文件在本文的上边我只改了一个请求位置 FileServiceClient //FeignClient注解来指定服务提供者的名称 configuration属性指定了一个内部静态类MultipartSupportConfig用于配置Feign的编码器。 FeignClient(value eureka-feign-upload-server,configuration FileServiceClient.MultipartSupportConfig.class) public interface FileServiceClient {//SpringFormEncoder是Feign提供的一个编码器用于处理multipart/form-data类型的请求。PostMapping(value /upload,consumes MediaType.MULTIPART_FORM_DATA)String uploadFile(RequestPart( value file) MultipartFile file);Configuration //代表这个是一个配置类告诉Springclass MultipartSupportConfig{Beanpublic Encoder feignFromEncoder(){//返回一个Feign的编码器return new SpringFormEncoder();}} }FeignClientConfig配置类 Configuration public class FeignClientConfig {Beanpublic Encoder feignFormEncoder() {return new SpringFormEncoder();}Beanpublic Decoder feignDecoder() {return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()));}private ObjectFactoryHttpMessageConverters feignHttpMessageConverter() {final HttpMessageConverters httpMessageConverters new HttpMessageConverters(new FormHttpMessageConverter());return () - httpMessageConverters;} }UploadController 控制类 RestController RequestMapping(/api) public class UploadController {Autowiredprivate FileServiceClient fileServiceClient;GetMapping(/)public String index() {return upload.html;}RequestMapping(/upload)public void uploadFile(RequestPart( value file) MultipartFile file) {fileServiceClient.uploadFile(file);} } 启动类 SpringBootApplication EnableDiscoveryClient EnableFeignClients public class EurekaUploadClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaUploadClientApplication.class);} }单元测试类 注意单元测试的时候需要一个upload.txt文件你自己创建 Slf4j RunWith(SpringJUnit4ClassRunner.class) SpringBootTest public class UploadTest {AutowiredFileServiceClient fileServiceClient;Testpublic void testUpload(){File file new File(upload.txt);DiskFileItem fileItem (DiskFileItem) new DiskFileItemFactory().createItem(file,MediaType.TEXT_PLAIN_VALUE,true,file.getName());try (InputStream input new FileInputStream(file); OutputStream os fileItem.getOutputStream()) {IOUtils.copy(input, os);} catch (Exception e) {throw new IllegalArgumentException(Invalid file: e, e);}MultipartFile multipartFile new CommonsMultipartFile(fileItem);log.info(fileServiceClient.uploadFile(multipartFile));} }单元测试日志 2023-12-15 15:03:24.077 INFO 12148 --- [ main] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client eureka-feign-upload-server initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:nameeureka-feign-upload-server,current list of Servers[localhost:3401],Load balancer statsZone stats: {defaultzone[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:localhost:3401; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] ]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList4374c051 2023-12-15 15:03:24.168 INFO 12148 --- [ main] com.miaow.UploadTest : 文件上传成功 2023-12-15 15:03:24.180 INFO 12148 --- [ Thread-8] c.n.l.PollingServerListUpdater : Shutting down the Executor Pool for PollingServerListUpdater 2023-12-15 15:03:24.181 INFO 12148 --- [extShutdownHook] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application EUREKA-FEIGN-UPLOAD-CLIENT with eureka with status DOWN 2023-12-15 15:03:24.182 WARN 12148 --- [extShutdownHook] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp1702623804182, currentDOWN, previousUP] 2023-12-15 15:03:24.182 INFO 12148 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_EUREKA-FEIGN-UPLOAD-CLIENT/localhost:eureka-feign-upload-client:3402: registering service... 2023-12-15 15:03:24.185 INFO 12148 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService applicationTaskExecutor 2023-12-15 15:03:24.188 INFO 12148 --- [extShutdownHook] c.n.u.concurrent.ShutdownEnabledTimer : Shutdown hook removed for: NFLoadBalancer-PingTimer-eureka-feign-upload-server 2023-12-15 15:03:24.194 INFO 12148 --- [extShutdownHook] c.n.u.concurrent.ShutdownEnabledTimer : Exception caught (might be ok if at shutdown)单元测试成功了那么我们去网页上看看吧http://localhost:3402/static/upload.html ok至此我们完成这个功能了。算是把坑填完了。
http://www.huolong8.cn/news/146289/

相关文章:

  • 广东省城乡建设部网站中国搜索网站提交入口
  • 招投标网站开发费用威宁住房和城乡建设局网站
  • 珠海网站艰涩和写软文一篇多少钱合适
  • 建设网站推广广告图企业网站app
  • 河北省建设厅报名网站甘肃建设厅官方网站
  • 做网站分几步广东贸易网站建设
  • 银联支付网站建设定制建网站
  • 辣条类网站建设规划书win7支持wordpress
  • 桓台做网站网站设计需求书
  • 三合一网站建设系统提供深圳网站制作公司
  • 多站点wordpress安装网站搜索页面设计
  • 做网站需要注意什么如何编辑网站源代码
  • 响应式网站一般做几个设计稿ps做网站框架搭建
  • 祥云平台做网站如何中国和住房城乡建设部网站
  • 汕头网站设计定制网站开发技术有什么软件
  • 我的网站为什么打不开怎么回事上海专业seo公司
  • 怎么.做网站公司章程范本
  • 个人做网站需要注意什么西局网站建设
  • 怎么建立一个网站放图片烟台商城网站制作
  • 无锡市网站搭建机械加工网上平台
  • 天猫网站做链接怎么做共享影院 wordpress
  • 微信社群营销怎么做代哥seo
  • jsp做手机网站数商云商城
  • 一流的镇江网站建设南宁seo优化公司
  • 石材公司网站wordpress怎么装模板
  • 篮球网站建设目标做网站收费标
  • seo网站开发注意事项中小企业网络营销案例
  • 360免费建站可以免费又永久吗17网一起做网店广州
  • 温州自适应网站建设动态电商网站怎么做
  • 网站注销备案查询成都知名网站建设公司