簡體   English   中英

Android RestTemplate使用utf-8發布multipart / form-data

[英]Android RestTemplate post multipart/form-data with utf-8

我從Android發布帶有utf-8內容的multipart / form-data時遇到問題。

這是我的AsyncTask的片段,用於將數據發布到服務器。 除utf字符串數據外,其他一切正常。 服務器收到“ ????????” <問號,而不是utf-8文本。

RestTemplate restTemplate = new RestTemplate();
FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
//formConverter.setCharset(Charset.forName("UTF8")); // don't works

restTemplate.getMessageConverters().add(formConverter);
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Cookie", "my cookie string");

// don't works
//Charset charset = Charset.forName("UTF8");
//ArrayList<Charset> acceptCharset = new ArrayList<>();
//acceptCharset.add(charset);
//httpHeaders.setAcceptCharset(acceptCharset);

File f = new File(this.caller.mainActivity.getApplicationContext().getCacheDir(), "picture");
f.createNewFile();

OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
caller.mainActivity.capturedBitmap.compress(Bitmap.CompressFormat.PNG, 90, os);
os.close();

MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("picture", new FileSystemResource(f.getPath()));
map.add("categoryId", "1");
map.add("description", "text with utf-8 content ტესტ . test");

HttpEntity<MultiValueMap<String, Object>> requestDataEntity = new HttpEntity<>(map, httpHeaders);

HttpEntity<HashMap> response = restTemplate.exchange("url.of.server", HttpMethod.POST, requestDataEntity, HashMap.class);

服務器沒有問題。 我從郵遞員進行了測試,服務器可以接收包含utf-8內容的multipart / form-data。

服務器上“描述”的值是:“帶有utf-8內容的文本????。測試”

服務器端 -路由片段

var express = require('express');

var multer  = require('multer');
var upload = multer({ limits: { fileSize: 2000000, files: 1 }, dest: 'tempFiles/' });

....
....

router.post('/add', app.filters.commons.sessionRequired(),  upload.single('picture'), function (req, res, next) {
    activityBL.add(req, function (error, data) {
        error ? next(error) : res.json(data);
    });
});

....
....

activityBL-業務邏輯的片段

....
....

bl.add = function (req, cb) {

    var file = req.file || null;

    if(!file) {
        cb({errors: [{code: "004", keyword: "PICTURE_REQUIRED"}]}, null);
        return;
    }

    /*
     * retrieve request data
     */
    var requestData = JSON.parse(JSON.stringify(req.body));

    var desc = requestData.description;

    ....
    ....
    ....  
}

可能需要設置標題以顯示utf-8字符。

header(“ Content-Type”,“ application / json; charset = utf-8”);

請參考此鏈接: http : //expressjs.com/en/api.html,您可以為您提供更好的主意。

確保獲取的表和數據庫也應用UTF-8歸類。

好運..!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM