For uploads with drop zone.js, file names containing non-ascii characters will not be encoded before sent to the server. They are just left as they are:
------WebKitFormBoundaryvXgdeNXSwHZBUrFJ
Content-Disposition: form-data; name="file[0]"; filename="täst.png"
As a result, on server-side encoding is unknown.
Is there a way to force dropzone.js to UrlEncode the filename, similar to RFC 6266?
Content-Disposition: form-data; name="file[0]"; filename*=utf-8''t%c3%a4st.png
Or is there any other solution?
I ran into the same problem and what I ended up doing to solve this was to pass an additional parameter.
$("#myDz").dropzone({
init: function () {
this.on("sending", function(file, xhr, formData) {
var fn = encodeURI(file.name)
formData.append("encFilename", fn);
});
}
});
This will send the additional parameter encFilename to the backend which can then be used to name the file when it's written to disk. file.name can't be updated at that point but doing it like this works just fine.
IamNaN's solution works fine. Just need to decode in Java WS:
filename = java.net.URLDecoder.decode(filename, "UTF-8");
Related
I am trying to download a zip fie which is returned as binary in the response of a AJAX Request.
I tried the following code but was not able to download it and even if I downloaded it the file got corrupted. I checked whether the response is correct and went to the network tab in developer tool and saved the response as a zip file and opened it, and it was successfully opened.
Hopefully someone can tell me what I am doing wrong.
var URL = window.URL;
var downloadData = new Blob([data._body], { type: 'application/octet-stream' });
var downloadURL = URL.createObjectURL(downloadData);
window.open(downloadURL);
the browser openes up a new window and tells me the file is not supported in IE & downloads a corrupted file in Chrome. The URL in browser is something like
blob:http://localhost:4200/62b8283c-1391-4133-98a4-ed3cc9aa1f73
-
var downloadData = new Blob([data._body], { type: 'application/zip' });
FileSaver.saveAs(downloadData,"hi.zip");
The above code does not give any specific errors but when the file is saved it is corrupted.
I also tried the above code with type as application/octet-stream but that has the same result.
Thing is the binary data seems to be perfectly fine, the only thing I need to do is open a save dialog which will save the binary data. Seems to be a pretty simple usecase, but seems to be a bit confusing in case of zip in the Js/TS side.
I think the main issue is that I am creating a blob with the binary data(which I don't think I need to or should be transforming to a blob) but I was not able to trigger the download without creating a blob object as the APIs seem to be accepting only blob(like the URL Object or FileSaver API).
I had the exact same problem, the zip file was corrupt when I was trying to open it.
I fixed it by adding: responseType = ResponseContentType.ArrayBuffer
Here is my code:
public httpRequest(call) {
call.headers = new Headers({
'Authorization': 'Bearer ' + localStorage.getItem('id_token'),
'Content-Type': 'application/json',
'Accept': 'application/octet-stream'
});
let req = new Request(call);
req.responseType = ResponseContentType.ArrayBuffer;
return this.http.request(req).map((res: Response) => {
return res;
});
}
make sure you imported:
import { Http, Headers, Request, Response, BaseResponseOptions, ResponseContentType } from '#angular/http';
I am trying to upload file through Intellij IDEA REST Client. I choose "File to upload (multipart/form-data)" and choose file to send. What is parameter name of this file? In my Sprint Controller i use this code
#RequestMapping(method = RequestMethod.POST, value = "/{id}/photo")
public void setCover(#PathVariable int id,
#RequestParam MultipartFile file) {
System.out.println(file.getName());
}
I also tried different names, such as "file", "fileToSend", "File to send" for #RequestParam, but Spring always cant find MultipartFile paramater.
I use the following code which works for me:
POST http://localhost:9003/goods/add HTTP/1.1
Content-Type: multipart/form-data; boundary=boundary
--boundary
Content-Disposition: form-data; name="file"; filename="file.csv"
// The 'input.txt' file will be uploaded
< /Users/xing/Desktop/file.csv
--boundary
Content-Disposition: form-data; name="advertType"
1
--boundary
// The method in the Spring controller
public Xxxx add(#RequestParam("file") MultipartFile file, Long advertType) {
For more information, please refer to https://www.jetbrains.com/help/ruby/exploring-http-syntax.html#use-multipart-form-data
File upload is not allowed due to security concern, not for application running on local machine. This solution worked for me. Its based on the comment by vincent.
See below:
POST http://localhost:8080/api/test HTTP/1.1
Content-Type: multipart/form-data; boundary=WebAppBoundary
--WebAppBoundary
Content-Disposition: form-data; name="param1"; filename="myfile.csv"
Content-Type: application/csv
// below will the path to the file (i.e. myfile.csv)
< C:/users/user/data/sample/myfile.csv
--WebAppBoundary
Content-Disposition: form-data; name="param2"
// value of param2
test
--WebAppBoundary
###
If you wish to do multipart file uploads inside IntelliJ IDEA's REST Client, please upvote this bug report => https://youtrack.jetbrains.com/issue/WEB-20197
I am trying to post an image using the source parameter (Multipart/form-data) in the Graph API explorer. My source parameter looks like this:
{Content-Type: multipart/form-data; boundary=xxxsrixxx
--xxxsrixxx
Content-Disposition: attachment; filename=try2.gif
Content-Type: image/gif
Content-Transfer-Encoding: binary,base64
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
--xxxsrixxx--}
This always seems to return
{
"error": {
"message": "(#324) Requires upload file",
"type": "OAuthException",
"code": 324
}
}
Few questions:
Does facebook source parameter accept base64 encoded image data?
Has anyone tried using the source parameter in the graph api explorer and have a working sample?
should the source param value should be url-encoded?
Note: My access token has all the required permissions and if i am not wrong, my encoding seems to be wrong. The base64 encoded text above is a complete image and i could decode it and get the image.
Ok. This is going to sound crazy. After a week of trying I was able to post an image successfully to the facebook wall. The fix was to send the raw binary data as it is (no base64 encoding - fb does not like it) and make sure your multipart/form-data is correct. For instance, if you boundary is defined as "boundary=--xxxsrixxx" your actual request should look like this "----xxxsrixxx\r\nContent-Disposition......\r\n----xxxsrixxx"
This works fine for me, it only uses native JavaScript features and a file input:
const fileReader = new FileReader();
const file = document.getElementById('imageInput').files[0];
fileReader.onloadend = async () => {
const photoData = new Blob([fileReader.result], {type: 'image/jpg'});
const formData = new FormData();
formData.append('access_token', pageAccessToken);
formData.append('source', photoData);
formData.append('message', 'some status message');
let response = await fetch(`https://graph.facebook.com/${pageId}/photos`, {
body: formData,
method: 'post'
});
response = await response.json();
console.log(response);
};
fileReader.readAsArrayBuffer(file);
More information: http://www.devils-heaven.com/facebook-javascript-sdk-photo-upload-with-formdata/
I have a template like this:
<img class="picto"
ng-repeat="module in modules"
ng-src="{{module.Source}}"
title="{{module.Title}}"
ng-click="module.handler();"/>
When I set the $scope.modules array using static code, everything works fine, and the images are fetched via GET using media type "image/gif" (for gif files). However, when I retrieve the same array using $http.get() - see the code below -, angular tries to retrieve the images using media type "text/html" which results in an 404 error:
$http.get('/api/modules', {})
.success(function (data) {
$http.defaults.get = { 'Content-Type': 'image/gif' }; // apparently useless
$scope.modules = data;
for (var module in $scope.modules) {
$scope.modules[module].handler = function () { alert(this.Id); };
}
delete $http.defaults.get; // ...useless
});
Trying to add a header default did not help either (// apparently useless). Can you see what's wrong?
Try it with Accept: 'image/gif' instead of Content-Type: 'image/gif'.
The Content-Type header describes the data format you are sending to the server. The Accept header describes the data formats you accept in response from the server.
I'm trying to read XML with AJAX, all the data are took from a well formed XML file and then are sended to client page through AJAX. But xmlhttp.responseXML always remains unusable.
Here's my controller :
def fileGetter = {
if (params.fileId) {
try {
String resultStr = fileManipulatorService.fileProvider(params.fileId).getText()
println resultStr
render(text: resultStr, contentType: "text/xml", encoding: "ISO-8859-1")
response.sendError(200)
}
}
}
resultStr contains the proper xml, on my webpage xmlhttp response text contains the correct xml data too while xmlhttp response xml contains nothing. How can I send true xml data to my client page and exploit it? I need too work with an XML response. (I tried to send a new xml object created from the string, I tried to return the original file, but none of these methods worked)
(I'm using Chrome)
Thank you
I'm not sure if this is the cause of your problem, but this code doesn't make any sense
render(text: resultStr, contentType: "text/xml", encoding: "ISO-8859-1")
response.sendError(200)
Grails does not return after executing render so it will execute the response.sendError after returning valid data. Replace these lines with
render(text: resultStr, contentType: "text/xml", encoding: "ISO-8859-1")
You may try
render resultStr as XML
It should work, thougt I don't really like these converters.