NutzCN Logo
问答 关于上传的问题
发布于 2990天前 作者 哎呦哥哥 1617 次浏览 复制 上一个帖子 下一个帖子
标签:
  1. 上传后,文件名字变为01,02,03。。。。。。
  2. 上传的实际路径变成了这样 : \WEB-INF\tmp\user_avatar\00\00\00\00\00\00\00
    /**
	 * 上传测试
	 * @return
	 */
	@At("/up")
	@AdaptBy(type = UploadAdaptor.class, args = { "${app.root}/WEB-INF/tmp/user_avatar", "8192", "utf-8", "20000", "102400"} )
	public View up(@Param("photo") TempFile[] tfs){
		return new ViewWrapper(new JspView("views/front/home"),null);
	}
15 回复

tfs可以获取到原来文件的信息

@kerbores

@At("/up")
	@AdaptBy(type = UploadAdaptor.class, args = { "${app.root}/WEB-INF/tmp/user_avatar", "8192", "utf-8", "20000", "102400"} )
	public View up(@Param("photo") TempFile tf){
		System.out.println(tf.getFile());//C:\Users\Emay\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\...
		
		System.out.println(tf.getMeta().getFileLocalPath());//名字,开题报告.doc
		System.out.println(tf.getMeta().getFileLocalName());//名字,开题报告.doc
		System.out.println(tf.getMeta().getContentDisposition());//form-data
		System.out.println(tf.getMeta().getContentType());//application/msword
		System.out.println(tf.getMeta().getFileExtension());//.doc
		System.out.println(tf.getMeta().getName());//photo
		return new ViewWrapper(new JspView("views/front/home"),null);
	}

@kerbores 我存的文件路径不是这个注解上的 ${app.root}/WEB-INF/tmp/user_avatar

实际上的路径是这个:C:\Users\Emay\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\designsource\WEB-INF\tmp\user_avatar\00\00\00\00\00\00\00\09.jpg

多了一堆\00\00\00\00\00\00\00\

那是"临时文件", 自行Files.copy到需要的路径去.

@wendal 他为什么没有走注解上面的路径呢,"${app.root}/WEB-INF/tmp/user_avatar"

  1. ${app.root}的值就是serveltContext.getRealPath("/")的值, 在eclipse+tomcat环境下也就是"C:\Users\Emay\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\designsource"这种路径
  2. 这是临时目录

@wendal 做了个更简单的测试

@At("/upload")
	@AdaptBy(type = UploadAdaptor.class, args = { "${app.root}/WEB-INF/tmp", "8192", "utf-8", "20000", "102400" })
	@POST
	public void upload(@Param("file") TempFile tf) {

	}

报错如下,只想上传个文件

Using form upload ? You forgot this --> enctype='multipart/form-data' ?
2016-10-14 16:7:10.149 WARN [http-nio-8080-exec-19] Error@/amax/upload :
java.lang.IllegalArgumentException: Unknow Content-Type : application/x-www-form-urlencoded

@qq_c1bab051 页面还是postman?

@wendal
jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="upload" method="post">
		<input name="file" type="file" /> <input type="submit" value="submit">
	</form>
</body>
</html>

UploadModule

package nutz.module;

import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.upload.UploadAdaptor;

@IocBean
public class UploadModule {
	@At
	@AdaptBy(type = UploadAdaptor.class, args = { "${app.root}/WEB-INF/tmp" })
	public void upload() {

	}

	@At
	@Ok("jsp:jsp.index")
	public void index() {

	}
}

上传了一个xml文件报错,报错如下:

2016-10-15 20:20:56.100 DEBUG [http-nio-8080-exec-5] Get 'uploadModule'<class nutz.module.UploadModule>
2016-10-15 20:20:56.101 WARN [http-nio-8080-exec-5] Using form upload ? You forgot this --> enctype='multipart/form-data' ?
2016-10-15 20:20:56.106 WARN [http-nio-8080-exec-5] Error@/upload :
java.lang.IllegalArgumentException: Unknow Content-Type : application/x-www-form-urlencoded
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:17)
	at org.nutz.lang.born.BornContext.doBorn(BornContext.java:60)
	at org.nutz.lang.Mirror.born(Mirror.java:990)
	at org.nutz.lang.Lang.makeThrow(Lang.java:150)
	at org.nutz.mvc.upload.UploadAdaptor.getReferObject(UploadAdaptor.java:198)
	at org.nutz.mvc.upload.UploadAdaptor.getReferObject(UploadAdaptor.java:61)
	at org.nutz.mvc.adaptor.AbstractAdaptor.adapt(AbstractAdaptor.java:226)
	at org.nutz.mvc.upload.UploadAdaptor.adapt(UploadAdaptor.java:116)
	at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:28)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:58)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:123)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
	at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
	at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
	at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
	at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:198)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1452)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

求解答@wendal

@qq_c1bab051 仔细看报错信息

@wendal 所以啊,这个enctype='multipart/form-data' 应该放在哪啊?我哪里漏掉了?😭

来自炫酷的 NutzCN

@qq_c1bab051 form的一个属性,跟method一样

@wendal 那要在service里面实现${app.root},获取项目更目录,还只能用ServletContext.getRealPath("/")?nutz有木有提供啥简便方法啊?

@qq_c1bab051 木有

添加回复
请先登陆
回到顶部