圖片上傳功能,java

最近做了個前端上傳圖片功能
由於不明原因,一直不能直接用上傳文件的方式上傳圖片,因此,把這個問題總結一下
1.通過base64轉碼上傳

前端界面:
html:
主要還是通過
input file上傳
<input id="papersPhoto" name="papersPhoto" type="file" class="main1rn" onchange="preview(this)" placeholder="未選擇任何文件" accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp" />
注意:如果是form表單提交,需要在form表頭添加 enctype="multipart/form-data"
enctype="multipart/form-data"表示不對錶單數據進行編碼


js:

了一個隱藏的input接收編碼


java:
首先要要將編碼base64,前面不必要編碼去掉
String[] imagesNew = images.split(",");
images = imagesNew[1];
try {
//重命名圖片名稱
String imageName = System.currentTimeMillis() + "." + imageType;
BASE64Decoder decoder = new BASE64Decoder();
//解碼
byte[] decoderBytes = decoder.decodeBuffer(images);
for(int i=0;i<decoderBytes.length;++i) {
if(decoderBytes[i]<0)
{//調整異常數據
decoderBytes[i]+=256;
}
}
// 上傳文件路徑
String path = request.getSession().getServletContext().getRealPath("resources"+File.separator +"images");
// 圖片路徑+名稱
String fileName = path +File.separator+ imageName;
File filepath = new File(path, fileName);
// 判斷路徑是否存在,如果不存在就創建一個
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
FileOutputStream write = new FileOutputStream(new File(fileName));
write.write(decoderBytes);
write.flush();
write.close();
2.通過file類接收
上面的方法是前端傳送編碼,後臺解碼的方法來上傳圖片
由於項目限制,本人也是被逼無奈採用這種方式

如果可以,還是採用file類來操作比較簡單

1)通過form表提交,
如果是通過form表單提交,那麼form表單寫法和前面一樣,需要注意的java的寫法
java
通過MultipartFile file接收參數,如果不能通過MultipartFile接收參數,看下是不是文件解析器沒有配置
<!-- 上傳文件解釋器 -->
   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property name="defaultEncoding" value="utf-8" />
     <property name="maxUploadSize" value="10485760" />
    <property name="maxInMemorySize" value="4096" />
      <property name="resolveLazily" value="true" />
  </bean>

下面只列出主要實現,具體需要看情況
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
  MultipartFile file = multipartRequest.getFile("file");//file是頁面input的name名
// 上傳文件路徑
String path = request.getSession().getServletContext().getRealPath("resources"+File.separator +"images");
// 上傳文件名
String filename = file.getOriginalFilename();
String prefix=filename.substring(filename.lastIndexOf(".")+1);
filename = new Date().getTime()+"."+prefix;
File filepath = new File(path, filename);
// 判斷路徑是否存在,如果不存在就創建一個
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
// 將上傳文件保存到一個目標文件當中
file.transferTo(new File(path + File.separator + filename));
2)通過ajax提交
沒有具體做過使用ajax提交。
但思路大概是引入formdata,通過form提交到後臺
大概js是這樣的
var file =$('#file').files[0];
var data = new FormData();
data.append("file", file);
$.ajax({ type: "POST", url: "*******l", data: data, cache: false, contentType: false, //不可缺 processData: false, //不可缺 dataType:"json", success: function(suc) { } }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章