當前位置:首頁 » 文件管理 » struts上傳附件

struts上傳附件

發布時間: 2023-07-21 04:55:30

❶ struts 文件上傳錯誤

Struts2本身提供了一個文件上傳的攔截器,通過配置該攔截器可以更輕松地實現文件過濾。我們只需要在Action中配置該攔截器就可以了。當文件過濾失敗後,會自動轉向input邏輯視圖,因此必須為該Action配置名為input的邏輯視圖,除此之外還必須為配置defaultStack的攔截器的引用。配置文件如下:

<action name="upload" class="com.annlee.upload.UploadAction" >
<!-- 配置fileUpload的攔截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允許上傳的文件類型 -->
<param name="allowedTypes">image/bmp,image/gif,image/jpg</param>
<!-- 配置允許上傳的文件大小 -->
<param name="maximumSize">2000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

<param name="savePath">/</param>
<result>/common/succ.jsp</result>
<result name="input">/cos_fileupload/fileupload.jsp</result>
</action>

如果上傳失敗系統會返回到原來的頁面,要在原來的頁面上加上以下錯誤提示代碼:

<s:fielderror />這樣系統就會返回提示給用戶,但是這時的提示是Struts2自帶的提示,非常不友好,我們可以國際化資源里配置以下兩項,我們的提示就會自動替換Struts2的提示,提示的關鍵字如下

struts.messages.error.file.too.large

struts.messages.error.content.type.not.allowed

此外,如果用戶上傳失敗的原因不是因為以上兩種還有另外的一個信息提示用戶,它的關健字是:struts.messages.error.uploading,我們也應該替換這個提示信息。

其它說明:如果沒有指定臨時的保存文件夾,系統就會使用javax.servlet.context.tempdir路徑,這個路徑是Tomcat的work\Catalina\localhost\,我們應該設置自己的路徑,這個配置的屬性為struts.multipart.saveDir可以在struts.properties中配置,還有一個文件上傳的屬性:struts.multipart.maxSize設置整個表單請求內容的最大位元組數。

❷ struts2實現圖片的上傳和下載

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;
import com.zdvictory.taurus.common.util.*;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;

/** *
*/
public class UploadFileHandler {

private static int BUFFER_SIZE = 8192;

/**
* 上傳附件操作 傳遞參數:系統參數配置設置的參數名稱
*/
@SuppressWarnings("unchecked")
public static List<Attachment> upload(String sysParaName) throws Exception {
// 文件保存路徑
String path = SysParaFinder.getSysParaValue(sysParaName);
List<Attachment> list = new ArrayList<Attachment>();
MultiPartRequestWrapper request = (MultiPartRequestWrapper) ServletActionContext
.getRequest();
Enumeration enu = request.getFileParameterNames();
while (enu.hasMoreElements()) { // 對每一個文件域進行遍歷
String controlName = (String) enu.nextElement();
String[] fileNames = request.getFileNames(controlName);
File[] uploadFiles = request.getFiles(controlName);
for (int i = 0; i < uploadFiles.length; i++) {
File uploadFile = uploadFiles[i];
if (!uploadFile.exists())
continue;
// 如果文件夾不存在,創建文件夾,將文件保存到目錄
File dir = new File(request.getRealPath("/") + path);
if (!dir.exists())
dir.mkdirs();
String ext = fileNames[i].substring(fileNames[i].indexOf("."),
fileNames[i].length());// 獲取文件擴展名
String filename = UUID.randomUUID().toString() + ext;
File file = new File(request.getRealPath("/") + path + filename);
byte[] data = new byte[BUFFER_SIZE];
int byteRead = -1;
FileInputStream in = new FileInputStream(uploadFile);
FileOutputStream out = new FileOutputStream(file);
while ((byteRead = in.read(data)) != -1) {
out.write(data, 0, byteRead);
out.flush();
}
out.close();
in.close();
// 設置附件對象屬性
Attachment attach = new Attachment();
attach.setFilename(fileNames[i]);
attach.setContentType(ext);
attach.setFilepathname(path + filename);
attach.setFilesize(uploadFile.length());
list.add(attach);
}
}
return list;
}
}
文件下載

public String download() throws Exception {
redheadTemplate = redheadTemplateManager.findById(Long
.valueOf(getId()[0]));
String name = redheadTemplate.getName()
+ redheadTemplate.getFilepathname().substring(
redheadTemplate.getFilepathname().lastIndexOf("."),
redheadTemplate.getFilepathname().length());
this.setFilename(new String(name.getBytes(), "ISO8859-1"));
this.setFilepathname(redheadTemplate.getFilepathname());
return "download";
}
文件下載配置文件

<result name="download" type="stream">
<!-- 下載文件類型 -->
<param name="contentType">
application/octet-stream
</param>
<!-- 默認為 inline(在線打開),設置為 attachment 將會告訴瀏覽器下載該文件,filename 指定下載文
件保存時的文件名,若未指定將會是以瀏覽的頁面名作為文件名,如以 download.action 作為文件名,
這里使用的是動態文件名,${filename}, 它將通過 Action 的 getFilename() 獲得文件名 -->
<param name="contentDisposition">
attachment;filename="${filename}"
</param>
<!-- 下載的InputStream流,Struts2自動對應Action中的getDownloadFile方法,該方法必須返回InputStream類型 -->
<param name="inputName">downloadFile</param>
<!-- 輸出時緩沖區的大小 -->
<param name="bufferSize">8192</param>
</result>

❸ struts2如何同時上傳文件以及獲得表單數據

事實上這根本不需要什麼其他配置操作,因為這是Struts2,而不是原生Servlet,在Struts2中,攔截器會將request中的表單數據(或者文件格式的數據)都和action類中的屬性名稱一一對應的注入值(包括文件數據)。所以你需要做的,其實只是在jsp頁面(或html)中加入一個file類型的input標簽,名稱記住(比如為photo),然後在action類中加一個File類型(java.io.File)欄位,此欄位必須和剛剛的input標簽name屬性一致,即photo(private File photo;)。最後,需要注意的是,當你妄圖從網頁上傳一個文件類型的表單時,必須將包圍它的form類將enctype="multipart/form-data" method="post"加上,即method必須為post,且enctype,也就是表單數據類型,必須為二進制的。

❹ 我用struts2做的上傳文件功能,但當文件超過2G時頁面出現錯誤,這個有什麼辦法解決么

struts配置文件里有個上傳大小的常量可以配
可以配置default.properties文件,也可以直接配xml常量
常量名是struts.multipart.maxSize
值的話你自己換算就好了 1K*1024*1024什麼什麼的自己乘完放到value里

❺ java Struts2 根據文件路徑可以上傳附件嗎

示例代碼:
imForm = () form;
FormFile importFile = imForm.getImportFile();
InputStream is = importFile.getInputStream();

String store_path = request.getSession().getServletContext().getRealPath("/");
String relativePath = "fileupload/smartheat/profitInfo/ServiceProfitInfo_" + nowtime + ".xls";
String filePath = store_path + relativePath;
OutputStream os = new FileOutputStream(filePath);
int bytes = 0;
byte[] buffer = new byte[is.available()];
while((bytes=is.read(buffer, 0, is.available()))!=-1) {
os.write(buffer,0,bytes);
}

❻ java附件上傳功能,上傳的附件要根據時間來重命名,上傳的路徑保存在伺服器指定目錄根據年月來分的目錄里

如果使用框架的話,比如 struts ,就比較簡單了
獲取上傳的時間:
Calendar cal = Calendar.getInstance();
String year = String.valueOf(cal.get(Calendar.YEAR));
String month = String.valueOf(cal.get(Calendar.MONTH));
獲取路徑:
String path = ServletActionContext.getServletContext().getRealPath("/"+year+"/"+month);
直接保存在 path 這個目錄裡面就可以

如果沒有使用 框架,可以使用 FileUpload 這個 jar 包來上傳文件

❼ ssh 多文件上傳,怎麼實現

多附件struts 1.x,以下代碼由agatezone提供。
1.Jsp要用javascript
2.form必須enctype="multipart/form-data"
3.action要用form.getMultipartRequestHandler()獲取文件並存儲
struts2 更簡單,google之。

<%@ 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>struts1.x upload example</title>
<script type="text/javascript">
function addFileField() {
input_filesCount = document.getElementById("filesCount");
input_filesCount.setAttribute("value", parseInt(input_filesCount.getAttribute("value")) + 1)
div_files = document.getElementById("files");
br = document.createElement("br");
file = document.createElement("input");
text = document.createTextNode("File " + input_filesCount.getAttribute("value") + " : ");
file.setAttribute("type", "file");
file.setAttribute("name", "file" + input_filesCount.getAttribute("value"));
div_files.appendChild(text);
div_files.appendChild(file);
div_files.appendChild(br);
}
</script>
</head>
<body>
<form action="upload.do" method="post" enctype="multipart/form-data">
<input id="filesCount" type="hidden" name="filesCount" value="1" />
<div id="files">
File 1 :
<input type="file" name="file1" />
<br />
</div>
<input type="button" onclick="javascript:addFileField();"
value="add a file" />
<br />
<input type="submit" />
</form>
</body>
</html>

---------------------------------------
package cn.agatezone.example.struts1x.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

public class UploadAction extends Action {
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {

String dirPath = getServlet().getServletContext().getRealPath("/") + "upload";
Hashtable fileh = form.getMultipartRequestHandler().getFileElements();
for (Enumeration e = fileh.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
try {
FormFile formfile = (FormFile) fileh.get(key);
String filename = formfile.getFileName().trim(); // 文件名
/*
* @注意!!!
* 這里我沒有處理中文,但是如果想要中文無問題,
* 可以設置tomcat的server.xml中的URIEncoding="UTF-8"
*
* 但是,要是不設置的話可以自己用代碼解決問題!
* 為了簡單明了,本例只作為struts1.x上傳部分展示。
*/
if (!"".equals(filename)) {
// 不同的瀏覽器傳上的文件名可能有區別,有的是全路徑的
// 在這里保存文件
InputStream ins = formfile.getInputStream();
OutputStream os = new FileOutputStream(dirPath + File.separatorChar + filename);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();

}
} catch (Exception ex) {
System.out.println("出錯了!\n" + ex);
}
}

return mapping.findForward("success");

}

}

---------------------------------------------------------
銳志陳鵬 專注Java/.Net培訓
銳志技術社區:http://www.witshare.org/bbs/

❽ java 上傳附件實現方法

上傳附件,實際上就是將文件存儲到遠程伺服器,進行臨時存儲。舉例:
**
* 上傳文件
*
* @param fileName
* @param plainFilePath 文件路徑路徑
* @param filepath
* @return
* @throws Exception
*/
public static String fileUploadByftp(String plainFilePath, String fileName, String filepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
String bl = "false";
try {
fis = new FileInputStream(plainFilePath);
bos = new ByteArrayOutputStream(fis.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
Log.info("加密上傳文件開始");
Log.info("連接遠程上傳伺服器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
}
}
Log.info("檢查文件路徑是否存在:/"+filepath);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon( "查詢文件路徑不存在:"+"/"+filepath);
return bl;
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, fis);
Log.info("上傳文件成功:"+fileName+"。文件保存路徑:"+"/"+filepath+"/");
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}
}
備註:只需要修改上傳的伺服器地址、用戶名、密碼即可進行伺服器訪問上傳。根據實際需要修改即可。

熱點內容
私密上傳在哪 發布:2025-02-03 23:33:04 瀏覽:1000
切冰解壓 發布:2025-02-03 23:30:36 瀏覽:764
解壓攪拌聲 發布:2025-02-03 23:11:35 瀏覽:831
伺服器硬碟誤拔了怎麼辦 發布:2025-02-03 23:05:26 瀏覽:868
易手遙控連接密碼是多少 發布:2025-02-03 22:44:26 瀏覽:167
sql安裝程序配置伺服器失敗 發布:2025-02-03 22:44:25 瀏覽:587
可以寫腳本的點擊器 發布:2025-02-03 22:44:22 瀏覽:613
c演算法代碼 發布:2025-02-03 22:42:20 瀏覽:863
腳本貓 發布:2025-02-03 22:36:30 瀏覽:139
qt軟體如何反編譯 發布:2025-02-03 22:36:27 瀏覽:24