文件管理 · 2022年9月16日

java上传临时文件|哪位朋友帮我解释下java图片上传临时路径与图片网络相对路径

『壹』 java图片上传 关于 产生的临时文件的问题

1、这个是这样的,每次服务启动的时候就会清空,如果你要测试的话可以先把图片复制到项目下面(就是你上传后保存的路径)2、第二个没看懂,

『贰』 JAVA中如何获得临时文件的路径

public String uploadAttachment(@RequestParam(value = “attachmentFile”, required = false) MultipartFile file,String attachmentNum, HttpServletRequest request, ModelMap model) {System.out.println(“上传附件……”);WebErrors errors = validateUpload(file, request);if (errors.hasErrors()) {model.addAttribute(“error”, errors.getErrors().get(0));return “reserve_ctg/attachment_iframe”;}CmsSite site = CmsUtils.getSite(request);String origName = file.getOriginalFilename();String ext = FilenameUtils.getExtension(origName).toLowerCase(Locale.ENGLISH);// TODO 检查允许上传的后缀try {String fileUrl;if (site.getConfig().getUploadToDb()) {String dbFilePath = site.getConfig().getDbFileUri();fileUrl = dbFileMng.storeByExt(site.getUploadPath(), ext, file.getInputStream());// 加上访问地址fileUrl = request.getContextPath() + dbFilePath + fileUrl;} else if (site.getUploadFtp() != null) {Ftp ftp = site.getUploadFtp();String ftpUrl = ftp.getUrl();fileUrl = ftp.storeByExt(site.getUploadPath(), ext, file.getInputStream());// 加上url前缀fileUrl = ftpUrl + fileUrl;} else {String ctx = request.getContextPath();fileUrl = fileRepository.storeByExt(site.getUploadPath(), ext,file);// 加上部署路径fileUrl = ctx + fileUrl;}fileMng.saveFileByPath(fileUrl, origName, false);model.addAttribute(“attachmentPath”, fileUrl);model.addAttribute(“attachmentName”, origName);model.addAttribute(“attachmentNum”, attachmentNum);} catch (IllegalStateException e) {model.addAttribute(“error”, e.getMessage());log.error(“upload file error!”, e);} catch (IOException e) {model.addAttribute(“error”, e.getMessage());log.error(“upload file error!”, e);}return “reserve_ctg/attachment_iframe”;}

『叁』 请问有java上传文件到ftp服务器的demo吗,感激不尽

/** * 依赖commons-net-3.4.jar, commons-io-2.4.jar */public class FtpUtils {/*** 上传* @param host FTP地址* @param port 端口ftp默认22,sftp默认23* @param user ftp用户名* @param pwd ftp密码* @param destPath FTP文件保存路径* @param fileName ftp保存文件名称* @param file 需要上传的文件*/public static void upload(String host, int port,String user, String pwd, String destPath, String fileName, File file){FTPClient ftp = null;InputStream fis = null;try {//1.建立连接ftp = new FTPClient();ftp.connect(host, port);//2.验证连接地址int reply = ftp.getReplyCode();if(FTPReply.isPositiveCompletion(reply)){ftp.disconnect();return;}//3.登录ftp.login(user, pwd);//设置上传路径、缓存、字符集、文件类型等ftp.changeWorkingDirectory(destPath);ftp.setBufferSize(1024);ftp.setControlEncoding("UTF-8");ftp.setFileType(FTP.BINARY_FILE_TYPE);//4.上传fis = new FileInputStream(file);ftp.storeFile(fileName, fis);} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{IOUtils.closeQuietly(fis);try {if(ftp.isAvailable()){ftp.logout();}if(ftp.isConnected()){ftp.disconnect();}//删除上传临时文件if(null != file && file.exists()){file.delete();}} catch (IOException e) {e.printStackTrace();}}}}

『肆』 java怎么把.zip文件上传到另外的文件服务器

这个转换肯定是会出错的,struts 的formFile跟zipFile没有直接关系,怎么能这么强制转化呢?内建议1. 把文件保存到一个临时目容录(保存为zip文件)2. 读取这个文件3. 抽取想要的文件4. 把临时文件删除

『伍』 哪位朋友帮我解释下java图片上传临时路径与图片网络相对路径

对于路径抄的问题 一般都是把所袭有得到文件放在一个包(即一个文件夹)里 这样要是移动的话 就把那个包一起移动 这样不要用自己电脑上的C:/../..等盘符 就是要把图片和你的文件放在一个文件夹 例如:你的的class文件放在一个名叫net的文件夹下,现在你要在你的程序中添加一张为 myPicture.gif的图片,你就在net文件下下新建一个名为image的文件夹(名字自己随便取)【一般都习惯把图片放在一个统一的目录下】,在把myPicture.gif放在image下,这样你在编写代码的时候就只需写image/myPicture.gif就可以了 这样 你移动的时候只需要把net 这个文件夹移动就是了

『陆』 java上传文件时用户不提交表单,上传的文件怎么删除

给个建议,临时目录的文件其实可以异步删除 ,

就是说不需要依赖用户是否提交表单这个行为。

整个服务里需要有那么一个线程或者进程管理这个目录

这个线程需要有2块功能

定时侦测目录的文件数/目录空间

给一个阀值,当目录文件数、空间到怎样的值 ,按文件的创建时间排序删除最老的文档,删除数量可以给定一个百分比,当然你可以做一些过滤排除(比如创建时间到现在时间差少于半小时的不删除)

『柒』 java文件上传用commons-fileupload设置缓存临时文件的什么意思,有人还说Java虚拟机分配到的内存只有1

肯定和虚拟机内存有关啊!你是用io流来读写数据,那么内部肯定要为了效率使用Buffer包装流来缓存吧,假如现在要上传一个电影2g,你不设置缓存一次性上传整个文件,java虚拟机内存总共就那么大点(一般不设置只有64M)肯定要爆啊!,你平时的小Demo都只有几kb肯定不用缓存也行啦!

『捌』 java 上传文件 问题

是通过数据流上传吗? 利用 B\S架构还是 C\S架构? jsp文件上传大多采用采用开源项目来简化处理,这里列出常用的两个jar包的实现,并进行比较,说明他们的优缺点和应该注意的问题。 Commons FileUpload,可以在http://jakarta.apache.org/commons/fileupload/下载,这个包需要Commons IO的支持,可以在http://jakarta.apache.org/commons/io/下载 com.oreilly.servlet,可以在http://www.servlets.com/cos/下载 Commons FileUpload提供三种文件上传处理方式,DiskFileUpload、ServletFileUpload和PortletFileUpload三种方式,其中DiskFileUpload已经在javadoc下已经被标记为过期的方法,建议用ServletFileUpload代替,而PortletFileUpload需要配合portlet-api来使用,所以这里我们只介绍ServletFileUpload,并且这个也是最常用的。com.oreilly.servlet也提供了三种文件上传的处理方式,MultipartWrapper、MultipartRequest和MultipartParser三种方式,其中MultipartWrapper和MultipartRequest的用法基本相同,并且没有MultipartRequest提供的操作多,所以这里介绍MultipartRequest,MultipartParser和前两者有些不同,可以用来处理某些特殊情况,例如表单中有两个同名的文件上传选择框。我们暂时称三面三种文件上传方式分别为:ServletFileUpload方式(MultipartTestServlet)、MultipartRequest方式(MultipartTestServlet2)、MultipartParser方式(MultipartTestServlet3)代码如下:test.html<%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk" pageEncoding="gbk"%><html> <body> <form action="MultipartTestServlet" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet2" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet3" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> </body></html>MultipartTestServlet.javapackage com.bug.servlet;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUpload;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.RequestContext;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;public class MultipartTestServlet extends HttpServlet { public MultipartTestServlet() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("gbk"); RequestContext requestContext = new ServletRequestContext(request); if(FileUpload.isMultipartContent(requestContext)){ DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("c:/tmp/")); ServletFileUpload upload = new ServletFileUpload(factory); //upload.setHeaderEncoding("gbk"); upload.setSizeMax(2000000); List items = new ArrayList(); try { items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); if(fileItem.isFormField()){ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); }else{ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件没有选择 或 文件内容为空"); } } } } }}MultipartTestServlet2.javapackage com.bug.servlet;import java.io.IOException;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.oreilly.servlet.MultipartRequest;import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;public class MultipartTestServlet2 extends HttpServlet { public MultipartTestServlet2() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("gbk"); 不起作用 System.out.println("start "); MultipartRequest multi = new MultipartRequest(request, "c:/tmp/", 2*1024*1024, "gbk", new DefaultFileRenamePolicy()); System.out.println("start "); Enumeration filesName = multi.getFileNames(); Enumeration paramsName = multi.getParameterNames(); while(paramsName.hasMoreElements()){ String paramName = (String) paramsName.nextElement(); System.out.println(multi.getParameter(paramName)); } while(filesName.hasMoreElements()){ String fileName = (String) filesName.nextElement(); System.out.println(multi.getFilesystemName(fileName) + " " + multi.getOriginalFileName(fileName) + " " + multi.getContentType(fileName) + " "); if(multi.getFilesystemName(fileName)!=null && !multi.getFilesystemName(fileName).equals("")) System.out.println(multi.getFile(fileName).toURI()); } } }MultipartTestServlet3.javapackage com.bug.servlet;import java.io.File;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.oreilly.servlet.multipart.FilePart;import com.oreilly.servlet.multipart.MultipartParser;import com.oreilly.servlet.multipart.ParamPart;import com.oreilly.servlet.multipart.Part;public class MultipartTestServlet3 extends HttpServlet { public MultipartTestServlet3() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MultipartParser mp = new MultipartParser(request, 2*1024*1024, false, false, "gbk"); Part part; while ((part = mp.readNextPart()) != null) { String name = part.getName(); if (part.isParam()) { ParamPart paramPart = (ParamPart) part; String value = paramPart.getStringValue(); System.out.println("param: name=" + name + "; value=" + value); } else if (part.isFile()) { // it's a file part FilePart filePart = (FilePart) part; String fileName = filePart.getFileName(); if (fileName != null) { long size = filePart.writeTo(new File("c:/tmp/")); System.out.println("file: name=" + name + "; fileName=" + fileName + ", filePath=" + filePart.getFilePath() + ", contentType=" + filePart.getContentType() + ", size=" + size); } else { System.out.println("file: name=" + name + "; EMPTY"); } System.out.flush(); } } }}web.xml中加入 <servlet> <servlet-name>MultipartTestServlet</servlet-name> <servlet-class>com.bug.servlet.MultipartTestServlet</servlet-class> </servlet> <servlet> <servlet-name>MultipartTestServlet2</servlet-name> <servlet-class>com.bug.servlet.MultipartTestServlet2</servlet-class> </servlet> <servlet> <servlet-name>MultipartTestServlet3</servlet-name> <servlet-class>com.bug.servlet.MultipartTestServlet3</servlet-class> </servlet> <servlet-mapping> <servlet-name>MultipartTestServlet</servlet-name> <url-pattern>/MultipartTestServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MultipartTestServlet2</servlet-name> <url-pattern>/MultipartTestServlet2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MultipartTestServlet3</servlet-name> <url-pattern>/MultipartTestServlet3</url-pattern> </servlet-mapping>问题1、中文问题: 三种凡是都可以通过自己的方法来设置encoding为gbk开处理和解决中文问题,包括初始化的时候传入gbk作为参数,或是是初始化后通过setEncoding的方式来实现。 另外ServletFileUpload方式也可以通过request.setCharacterEncoding("gbk");的方式来实现,而其它两种方式不支持这种方式。问题2、文件大小限制 ServletFileUpload方式可以设置文件大小限制,也可以不用设置,例子中的upload.setSizeMax(2000000)就可以注释掉。如果设置upload.setSizeMax(-1),表明不限制上传的大小。文档中没有指明默认的限制的多少,我在不设置的情况下上传了一个9M的东西,可以上传,估计默认是不限制大小的。 而MultipartRequest方式和MultipartParser方式是必须设置文件的上传文件的大小限制的,如果不设置,默认是1M的大小限制。问题3、文件上传发生错误 如果文件上传过程中发生任何错误,或者是文件的大小超出了范围,系统都将抛出错误。 ServletFileUpload方式在upload.parseRequest(request)时抛出错误 MultipartRequest方式在new MultipartRequest(。。。)时抛出错误 MultipartParser方式在new MultipartParser(。。。)时抛出错误问题4、上传同名文件时,他们保存到临时目录是的冲突问题 ServletFileUpload方式,不会有冲突,系统会把上传得文件按照一定的规则重新命名,保证不会冲突 MultipartParser方式,会产生冲突,系统会把文件按照上传时的文件名,保存到临时目录下,如果两个用会同时上传文件名相同的文件,那么就可能会产生冲突,一方把另一方的临时文件给替换了。 MultipartRequest方式,在初始化时如果提供了一个名称转换策略,就不会有冲突,如果不提桶,就会有冲突。在上面的例子中我们提供了一个new DefaultFileRenamePolicy()保证了文件名不会有冲突发生。问题5:表单中有两个同名的文件上传选择框,就像我们例子中的myfile一样,每个表单中有两个name=“myfile”的上传框 ServletFileUpload方式,可以处理,可以分别得到他们各自的文件, MultipartRequest方式,不可以处理,会发生冲突,会有一个上传框的文件覆盖了另外一个。 MultipartParser方式,可以处理,可以分别得到他们各自的文件,备注: 代码比较乱,主要是为了说明他们间的区别。他们的详细地使用说明还是要参考他的javadoc和domo。

『玖』 Java利用commons-fileupload进行文件上传中设置缓冲区和临时文件什么意思请高手扫一下盲

我看到你的问题写了这么一长串,就想呵呵了你平时读写文件不是要用个byte来读取,其实这个byte数组也算是个缓冲区,只是你的缓冲区比较少,通常搞个1024这里的意思是, 如果你上传了一个文件,只有5kb,那么他不会生成文件,直接保存在内存中,给你处理但是当你超过了这个缓冲区,它就会生成一个临时文件再处理还有哪里不明白?