2019-07-13 關(guān)于form-data的上傳中文文件亂碼的解決辦法抖韩?


layout: post
title: 關(guān)于form-data的上傳中文文件亂碼的解決辦法藤树?
date: 2019-07-13 14:02:44 +0800
categories: 前端
tags: ["HTML", "springboot"]
notebook: 前端
comments: false
description: 對內(nèi)容的描述


問題匯總形耗?

  • 關(guān)于form-data的上傳中文文件亂碼的解決辦法?
  • 使用Jersey上傳文件到tomcat的中文亂碼問題?
  • Content-Disposition 文件上傳狸捅、下載 中文亂碼 HTTP頭 解決辦法衷蜓?
  • 關(guān)于亂碼的解決辦法?
  • 文件上傳小結(jié)尘喝?

使用表單測試磁浇,如果沒有enctype=“multipart/form-data"會出現(xiàn)提交類型不符合。

<form action="http://127.0.0.1:8081/resource/file/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="submit">
</form>

返回

{"code":0,"msg":"程序執(zhí)行成功","data":null}

查看文件名瞧省,亂碼

解決辦法扯夭,找到文件名的編碼,關(guān)于ASCII鞍匾,所以解碼就可以了。

new String(disposition.getFileName().getBytes("iso-8859-1"),"UTF-8");

輸出正確了

答:解碼就好了

文件上傳所有后臺代碼(不需要看)

package me.xiongxiao.life.plan.resource;

//import org.apache.tomcat.util.http.fileupload.FileUtils;
import me.xiongxiao.life.plan.entity.Result.Code;
import me.xiongxiao.life.plan.entity.Result.Msg;
import me.xiongxiao.life.plan.entity.Result.RCM;
import me.xiongxiao.life.plan.entity.Result.ResultData;
import me.xiongxiao.life.plan.service.TextRExtendService;
import me.xiongxiao.life.plan.util.Log;
import me.xiongxiao.life.plan.util.Time;
import me.xiongxiao.life.plan.verification.Verify;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.FileUtils;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContext;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.*;
import java.net.URL;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @ClassName FileResource
 * @Desctiption 描述
 * @Author Abear
 * @Date 2019/7/7 11:09
 * @Version 1.0
 **/
@Component
@Path("/file")
public class FileResource {
    @Autowired
    public Log LOGGER;
    @Autowired
    public TextRExtendService tService;
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Map<String, Object> hello() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("code", "0");
        map.put("msg", "success");
        return map;
    }
    @GET
    @Path("/name/{filename}/{token}")
    public Response getFile(@PathParam("filename") String filename, @PathParam("token") String token) throws UnsupportedEncodingException {
        filename = URLDecoder.decode(filename, "UTF-8");
        String st = filename.substring(0, 7); // 2019-07-10-xiong.jpg 位置 + 1
        String fileName = filename.substring(9);
        String pathname = "/upload/" + st + "/" + filename;
        File file = new File(pathname);
        LOGGER.i(filename + "  n: " + fileName + " pathname:"+pathname);
        //如果文件不存在骑科,提示404
        if(!file.exists()){
            return Response.status(Response.Status.NOT_FOUND).build();
        }
//        try {
//            filename = URLEncoder.encode("下載測試.xls", "UTF-8");
//        } catch (UnsupportedEncodingException e1) {
//            e1.printStackTrace();
//        }
        return Verify.v(token)?Response.status(Response.Status.UNAUTHORIZED).build(): Response
                .ok(file)
                .header("Content-disposition","attachment;filename=" + fileName)
                .header("Cache-Control", "no-cache").build();
    }
    // curl -X POST -F "file=@demo.txt" http://localhost:8081/resource/file
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Path("/upload")
    @Produces(MediaType.APPLICATION_JSON)
    public ResultData upload(@FormDataParam("file") InputStream fis,
                             @FormDataParam("file") FormDataContentDisposition disposition,
                             @Context ServletContext ctx) {
        String year_month = Time.getYearMonth();
        String file_path = "/upload/" + year_month;
        String year_month_day = Time.getYearMonthDay();
        String extension = FilenameUtils.getExtension(disposition.getFileName());
        if(extension.equals("")) return RCM.NO_TYPE();
        String file_name = null;//  String fb =  new String(file_name.getBytes("iso-8859-1"),"UTF-8");//file_name.getBytes("iso-8859-1").toString();
        try {
            file_name = new String(disposition.getFileName().getBytes("iso-8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
            return RCM.UNSUPPORTED_ENCODING();
        }

        String new_file_name = year_month_day + "-"+ file_name;
        File upload = new File(file_path,new_file_name);
        String path = "/resource/file/name/" + new_file_name;

        try {
            FileUtils.copyInputStreamToFile(fis, upload);
            tService.addEvent(extension, path);
            return new ResultData().success();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ResultData().error();
    }
    @GET
    @Path("/upload/cos")
    public String upload_cos(){
        return "cos html";
    }
}

  • 同步位置:CSDN,簡書橡淑,靜態(tài)博客。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咆爽,一起剝皮案震驚了整個濱河市梁棠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斗埂,老刑警劉巖符糊,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呛凶,居然都是意外死亡男娄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門漾稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來模闲,“玉大人,你說我怎么就攤上這事崭捍∈郏” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵殷蛇,是天一觀的道長实夹。 經(jīng)常有香客問我,道長粒梦,這世上最難降的妖魔是什么亮航? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮谍倦,結(jié)果婚禮上塞赂,老公的妹妹穿的比我還像新娘。我一直安慰自己昼蛀,他們只是感情好宴猾,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布圆存。 她就那樣靜靜地躺著,像睡著了一般仇哆。 火紅的嫁衣襯著肌膚如雪沦辙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天讹剔,我揣著相機與錄音油讯,去河邊找鬼。 笑死延欠,一個胖子當著我的面吹牛陌兑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播由捎,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼兔综,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狞玛?” 一聲冷哼從身側(cè)響起软驰,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎心肪,沒想到半個月后锭亏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡硬鞍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年慧瘤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膳凝。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡碑隆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蹬音,到底是詐尸還是另有隱情上煤,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布著淆,位于F島的核電站劫狠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏永部。R本人自食惡果不足惜独泞,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苔埋。 院中可真熱鬧懦砂,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羽资,卻和暖如春淘菩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屠升。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工潮改, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腹暖。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓汇在,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脏答。 傳聞我的和親對象是個殘疾皇子趾疚,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容